質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

1回答

1825閲覧

SwiftのVaporを自分のアプリの中に組み込むことはできますか?

Potewo

総合スコア27

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

1クリップ

投稿2020/01/28 08:01

編集2020/02/08 22:37

実現したいこと

現在SwiftでmacのCommand Line Toolアプリを作っています。特定のフォルダ内のmarkdownをhtmlに変換して、それをブラウザから見れるようにしたいです。オフラインの状態で使うことを想定しているので、インターネットにあげることはできません。
サーバーなしでそれぞれの記事にとぶリンクをhtmlにを貼っていく方法も考えたのですが、そのブラウザから今見ているhtmlの元になったmarkdownを自分の好きなエディタで編集できるようにしたく、ちょうどswiftでそれが出来そうだったので、swiftでサーバーをたてようかと考えました。
また、これを応用してiPhoneやiPadでのアプリ上でも同様のことをしたいです。
(ただ、iPhoneやiPadで編集するのは厳しそうなので閲覧だけになるかもしれませんが。)

聞きたいこと

アプリの中にVaporをライブラリーとしてimportして自分のアプリの中からローカルサーバーを建てることはできますか?
それともアプリ本体とは別でローカルサーバーを建ててアプリ本体からそれにアクセスしたほうが良いのですか?
できれば一つの実行ファイルだけにしたいのでアプリ本体の中にサーバー機能も含めてしまったほうが良いと思ったのですが、そうでないほうが良いのでしょうか?
回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/02/08 16:48

Vaporを使ったことはありませんが、フル機能のWebサーバーフレームワークと理解していますので、アプリに組み込むことは想定されてないと思います。自分で実験してエラーを解決できるスキルがないと難しいのではないでしょうか。 また、アプリにWebサーバーを組み込むこと自体、MacとiOSでは難易度が大きく異なります。Macの方が自由度が高いのでまだ何とかなる気がしますが、iOSではアプリに独立した実行ファイルを組み込むことはできませんし、バックグラウンドタスクの実行にも制限があるので…。 とりあえず、Webサーバーで何をしたいかを書いていただけると、解決策が見つかる可能性が高まると思います。
Potewo

2020/02/08 22:39 編集

コメントありがとうございます。追記しました。 長くなってしまいましたが、よろしければ、回答お願いします。
guest

回答1

0

ベストアンサー

Vaporはたぶんアプリに組み込んで使うものではないと思います。Macなら独立した実行ファイルにしてapp bundleに組み込むことは可能ですが、iOSでは不可能です。
アプリにWebサーバー機能を持たせたいということであれば、Vaporに拘らなくても CocoaHTTPServer などのライブラリがありますので、そちらを検討してみてはいかがでしょうか。


以下、蛇足かもしれませんが、

まず、ブラウザで表示するWebコンテンツには次の4種類(とその組み合わせ)があります。
a. ローカルのHTMLファイルなどをそのまま表示(Webサーバーは不要)
b. リモートの静的コンテンツを表示(Webサーバーはあらかじめ用意されたHTMLなどのファイルを返すだけ)
c. リモートの動的コンテンツを表示(Webサーバーは毎回HTMLなどのコンテンツを動的に生成して返す)
d. クライアント側のJavaScriptコードが(必要に応じてサーバーにアクセスして)現在の表示内容を書き換える

aは、Macの場合ならmarkdownから生成されたHTMLファイルをダブルクリックして直接Safariなどで開くことができ、この場合Webサーバーは不要です。
iOSでも、アプリ内Webビューを使えば、生成したHTMLファイルや、HTML文字列を直接(ファイルを作らずに)表示できます。
ただし、他のマシン(や、iOSの場合は他のブラウザ)から表示することは難しいです。

b(を多分お考えなのだと思いますが)は、macOSにはもともとWebサーバーが付いているので、ちゃんと設定してHTMLファイルの出力先を工夫すれば、特別なソフトウェアを入れなくてもできるはずです。(本格的にWeb開発したいならお勧めはしませんが。)
macOS Mojave の Apache で Sites ディレクトリを使って localhost を特定アカウントで利用する方法 - Qiita
macOS 10.15(Catalina)にアップデートしたらhttpd.confの設定が飛んだので復旧させたメモ - Qiita

cは、HTMLファイルを生成せずに、ブラウザからアクセスされるたびにmarkdownからHTMLを生成して返す方法になります。この場合、markdownを更新したのにHTMLが古いままという事故を防ぐことができます。

dは、例えばteratailの投稿画面で入力した内容がすぐにプレビュー表示されますが、おそらくサーバーにはアクセスせずにJavaScriptだけで処理していると思います。
また、クリップや高評価などのボタンはJavaScriptからサーバーに通知して、ページ全体を書き換えることなく処理していると思います。

で、CocoaHTTPServerはMacでもiOSでもアプリに組み込んで使えて、bだけでなくcやdもたぶん可能なので、まずはこちらをお勧めします。

投稿2020/02/09 08:38

hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Potewo

2020/02/09 09:19

回答ありがとうございます。 なるほど、やはりVaporを使うことは厳しそうですね。 回答に書かれているところのaかbで考えていました。 自分の知っているswiftのサーバーがVaporだけで、CocoaHTTPServerを知りませんでした。 CocoaHTTPServerを使ってやってみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問