TIS ENGINEER NOTE

27才文系出身フリーランスエンジニアのブログ

プログラミング

sinatraでミニマムなWebサービスを公開してみるよ【sinatra + nginx + puma + Capistrano】

更新日:

sinatraとはRubuで作成されたWebフレームワークです。かなりシンプルな構成ですので、Ruby自体の勉強用としてはRailsより向いているかも知れません。

今回はRailsを使うまでもない小規模なWebサイトを作成する機会がありましたので、sinatra + Puma + nginxの構成で公開し、Capistranoでデプロイできるようになるまでを作業をまとめてみました。

Rubyのインストール・公開サーバーの準備等は完了している前提で進めていきます。

作業PCでの作業

まずは開発用のローカル環境下での作業から。

今回はポートフォリオサイトを作るので、アプリケーション名はportfolioです。

まずはディレクトリを作成し、そのディレクトリに移動。その後bundle initでGemfileを生成します。

そして作成されるGemfileの最後にsinatraを追加します。

保存したら、以下のコマンドでvendor/bundle配下にgemをインストールします。ローカル環境は極力汚さない。

これでローカル開発環境自体は完成となります。

動作確認のために、Rubyファイルを作成し、修正します。

ひとまずはRubyファイルから直接表示します。最終的にはviewファイルを読み込むように修正します。

そしてsinatraを起動。

起動されたらブラウザからhttp://localhost:4567/にアクセスしてみましょう。

上記のようにmain.rbに記載した内容が表示されていればOKです。

Gitの初期設定

なにはともあれソースを書いたらバージョン管理。Gitの初期設定を行います。

以降のコマンドは基本的にアプリケーションディレクトリ(今回であればportfolio)配下で実行します。

使用しているPCで初めてGitを使用する場合

git init

アプリケーションディレクトリでgit initします。これでportfolio配下がGitによってバージョン管理される対象となります。

gitignoreを設定

git上にアップしたくないファイルを設定します。今回はvendor/bundle配下とbundlerのconfigはアップしないようにします。

add & commit

リモート設定

Gitリポジトリサービスの登録は済ませておいてください。

Bitbucket,GitHubなりお好みのサービスをどうぞ。

登録しているサービスでリポジトリを作成するとリモート設定のコマンドが表示されますので、そちらを実行しましょう。基本的には以下のような形です。

以上でバージョン管理の設定は完了です。長丁場ですね。コーヒーでも飲んで一休みしましょう。

サーバーへの配布準備

サーバーに公開するだけなら、作成したファイルをサーバーにコピーしてWebサーバーの準備をするだけですが、それだけだと変更を加えた時に、いちいちコピーし直さなければなりません。それって結構手間になります。

プログラマーは怠惰であれの言葉に則り、Capistranoというツールを使って、自動デプロイを実現しておきます。

Gitリポジトリにpushしたソースを公開サーバーにコピーするという処理をCapistranoにやってもらう流れです。

Webサービスの構築などについては下記サイトを参考に進めました。Railsでの例ではありますが、ディレクトリの設定などは同様に進めることが可能です。Rails、DBの設定の部分などは今回スキップしてしまって構いません。

http://qiita.com/eiei19/items/7c08d358c82cb538def0

まずはGemfileに下記を追加し、bundle installしましょう。

インストールが完了したら、下記コマンドでCapistranoの初期設定を行いましょう。

コマンドを実行して生成されたCapfileに以下のコマンドを追加しましょう。

更にconfig/deployファイルも生成されているので、こちらに配布用のコードを書いていきます。

あとは今回アプリケーションをPumaで動かすので、config.ruをアプリケーションディレクトリに作成しておきます。

ここまで完了したら下記コマンドで配布実行。

権限によってはwww配下にディレクトリが作れないよ!と怒られることもあるので、その場合はサーバーにアクセスし、直接作成しておきましょう。

エラーが発生したり、修正を行った時はリポジトリへのpushを忘れないようにしましょう。特にGemfileを修正した時などは、pushしてから再リトライしないと反映されないので要注意!

正常に終了したら、デプロイは完了です。

nginxの設定

これでアプリケーションが動く仕組みはできましたが、実際にインターネットからアクセスされた時にアプリケーションに繋げる仕組みができていませんので、nginxの設定を行います。nginxのインストールや基本的な設定は上で紹介した記事を参考にしてみてください。

今回は設定ファイルの例だけ書いておきます。

設定を記述し終わったら、nginxを起動、または再起動します。

これで実際にサーバーのドメインまたはIPにアクセスすれば作成したsinatraアプリケーションが表示されます。

これからモリモリカスタマイズしていこうと思います。

閲覧いただき、ありがとうございました。

よく読まれている記事

エンジニア入門

2018/8/19

本気でRubyを学びたい人のためのエンジニアスクール『ポテパンキャンプ』

こんにちは、フリーエンジニアのてぃすです。 エンジニアといえば今や最も少ない投資で高収入を望め、更には週3勤務やリモートワークなどの柔軟な働き方も目指せる夢のある職業です。 ここ最近は営業職や事務職から、将来性を考えてエンジニアに転身するといういう人もかなり増えてきています。 特にRubyプログラマーは日本における絶大な需要とリモート案件の豊富さから、特に人気のあるポジションとなっています。エンジニアとして働いているが、職場環境に不満を抱いていたり、今扱っている技術が今後通用するか不安に感じ、Ruby・W ...

続きを読む

エンジニア独立

2018/1/2

プログラマーはIT土方なのか

プログラマーという働き方について、調べたときに必ずといって良いほど出てくる単語であるIT土方。 実際に土木関係に従事する人たちがどのような労働環境におかれているかは置いといて、基本的には以下のような状況を揶揄して使われている言葉です。 毎日終電まで残業させられる 納期のプレッシャーに追われる 忙しいのに低賃金 とにかく辛い そういった過酷な環境であるから、『プログラミングを楽しいと思っていたり、理数系の才能がある人間じゃなければ絶対になるな』という言葉もよく聞きます。 今回はプログラマーが世間でIT土方と ...

続きを読む

エンジニア入門

2018/3/26

エンジニアは勉強し続けなければいけない職業なのか

こんにちは。フリーランスエンジニアのてぃすです。 最近は就職・転職する際にエンジニアを選択肢に含める人が増えてきています。 しかしエンジニアという職業を候補にあげるにあたって、 エンジニアは働きながら勉強し続けなければいけないのではないか? という疑問もよく見聞きします。 そこで今回はフリーランスエンジニアとして活動している僕の視点からこの疑問についての答えを説明していこうと思います。 結論 先に結論を述べると、 エンジニアは勉強し続けなければいけないのか? という疑問の答えはNOです。 決してエンジニア ...

続きを読む

エンジニア独立

2019/2/21

フリーランスエンジニアになって大変だったこと・苦労したこと

どうも、フリーランスエンジニアのてぃすです。 このブログでは基本的にITエンジニアの独立を勧めることが多いですが、今日はちょっと視点を変えて、フリーランスエンジニアとして活動する上で、苦労することに視点を当ててお話していこうと思います。 世間ではフリーランスをもてはやす声、それに対する反論などが飛び交っていますが、多くの意見が「フリーランス」という一括りにしたもので、実情を捉えていないものがほとんどであると感じています。 この記事では実際に僕がフリーランスエンジニアとして活動してきた中でリアルに体験してき ...

続きを読む

エンジニア独立

2019/3/10

ITエンジニアの働き方比較(正社員/派遣/フリーランス)

最近ではITエンジニアの需要が激増し、特にプログラマーを目指す人が増えてきました。 今の時代、プログラマーをはじめとするITエンジニアを仕事として選ぶことは賢明かつ的確な判断と言えるでしょう。 その一方で、世間ではプログラマーの不遇が叫ばれていたり、IT土方などの蔑称で呼ばれていたりします。 それは働き方の選択を誤っているプログラマーがあまりに多いことが原因となっています。 稼げる市場であるということは、依頼主と技術提供者の間に入って、不当に利益を得ようとする存在が増えることに繋がります。そういった存在に ...

続きを読む

-プログラミング
-,

Copyright© TIS ENGINEER NOTE , 2019 All Rights Reserved Powered by AFFINGER5.