Web開発話【ShankStream】 その3 〜 インフラ・開発環境 〜

ShankStream

前回の続きで、Webサービス「ShankStream」の裏話になります。

前回までのリンク

言語・フレームワーク・アーキテクチャ

前回までは仕様・設計について書きましたが、今回からは言語・フレームワーク・アーキテクチャについて書こうと思います。

いろいろあるので、一覧にしておきます。

まずは全体的に。

OS

Linux

言語

Javascript, SQL

フレームワーク

Express

Webサーバ

Nginx

APサーバ

Node.js

ストレージ

MySQL, Redis

サーバ設定

Chef, Knife

デプロイ

Capistrano

開発環境

VirtualBox, Vagrant

管理

Redmine, Git

CSS関係

Sass, Compass

Javascript関係 フロント(一部)

jQuery, underscore, Closure Compiler(圧縮)

Javascript関係 サーバ(一部)

underscore, async, config, socket.io, ejs, log4js, i18n


といった感じです。

特に珍しいものを使ってるわけでもなく、オーソドックスです。

開発環境

開発環境ですが、これはまずインフラ設計をする形になります。

本番環境とサーバ設定を基本的には同じにして、できるだけ差異のないようにして開発することで環境による動作の違いを防ごうという狙いです。

具体的には、VirtualBoxVagrantというもので仮想環境を立てます。

そして、インストールするものや、設定すべき項目に関しては絶対的に

sshでログインして直接設定することはしない

という決め事を作ります。

インストール・設定に関しては全てChefというものでレシピを書いて管理するようにします。

これはインフラをRubyで書いてそれを対象サーバに反映させることができます。

こうすることで、本番環境と開発環境での差異を小さくすることができます。

ただ、最初にサーバ環境を書かないといけないのでレシピを書くことに慣れないとアプリケーション本体を開発するまでの道のりが長くなったりする欠点(?)がでてしまいますが、一度書いてしまうと後々の手間を大幅に減らすことが出来ます。

アプリケーションのデプロイにはCapistrano (バージョン3系)というツールを使っています。

この中でメンテンス状態への移行、プロジェクトツリーの設置、キャッシュの削除、など一連の作業を自動化します。

今回はCapistranoでのデプロイの前に要らないファイルの削除や、画像、CSS、Javascriptの圧縮をしたかったので、これらの処理とデプロイを実行するシェルスクリプトを書いてそれを実行することで全ての工程を網羅させています。

このへんだけをやっておいたおかげで実際に初版のアプリケーションの開発が一区切りし、さあ公開するぞとなってからなんの設定もしていない本番サーバに全てを反映させるのに10分もかかりませんでした。(シェル叩くだけだったので)

また、 ソースコードの管理に関してはGitを使っています。

上記の開発環境の設定等もあるため、プロジェクトの第一階層は以下の様な感じになってます。

capistrano - デプロイに関するもの
chef       - サーバ設定に関するもの
commands   - バッチファイル群
deploy     - デプロイ時に使用する一時ディレクトリ
documents  - ドキュメント群
extension  - 拡張機能のプロジェクト
node       - アプリケーション本体
shells     - デプロイを実行する為のシェルスクリプト群
vagrant    - 仮想環境に関するもの

これらをラップしたものを1つのリポジトリとしています。

Ruby, VirtualBox, Vagrant,  Chef, Knife Soloといったものをインストールしておくと、

$ git clone [リポジトリ] 
$ cd [nodeディレクトリ] && npm install
$ cd [vagrantディレクトリ] && vagrant up

とターミナルで打つだけで環境が出来上がって動き出します。

慣れないうちは逆に時間かかるかもしれませんが、一度つくると別のプロジェクトでも応用が効いたりするので、先を見据えると効率が良くなっていく感じです。

レシピ

次回はChefでどんなレシピを作ったかを書きたいと思います(予定)。

以上です。

関連リンク

ShankStream

※本サービスのTOPページへ遷移します

ShankStream – Chrome拡張機能

※Chrome ウェブストアへ遷移します。

Recent Posts

Archive