Vagrant + Nginx + Ruby on Railsを動かしてみる
かなり遅まきながら、Rubyに触れる機会がありVagrantでのセットアップまでを試してみました。 RubyをVagrantにインストールし、Railsの新規プロジェクトを起動・ブラウザ確認するまでの工程をざっくり記載しました。
コマンドで迷ったところをメインにまとめてあるので、パッケージ不足のエラーなどは出力から判断し都度いれることで解消できると思います。
Vagrant構築
大まかな流れは以前やったので割愛します。
Rails Server起動時にport:3000を利用するので、Vagrantfileの設定を事前におこないます。 port:8080 --> 80 に加えてport:3000 --> 3000を追記します。 (わたしの手元環境ではphp/ruby/golangが混在しています…)
- ローカルPCのVagrantfile
config.vm.network "forwarded_port", guest: 80, host: 8080, id: "http" config.vm.network "forwarded_port", guest: 3000, host: 3000, id: "http"
Rubyをインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
- パスを通す
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc $ source ~/.bashrc
- rubyバージョンを切り替える
$ rbenv install 2.3.0 $ rbenv global 2.3.0 $ rbenv rehash $ ruby -v ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
プロジェクト構築
- 引き続きVagrant内での作業になります。
- まずはgemをインストールします。
- Bundlerもここで入れてしまいました。
$ sudo aptitude install rubygems $ gem install rubygems-update // 自分を更新 $ gem -v 2.5.1 $ gem install bundler
- gemコマンドでrailsをインストール、プロジェクト作成
$ gem install rails
$ rails new myapp
- 初回はbundle installでコケますので、以下のエラーに対処してリトライする
- sqlite3をインストールする
$ sudo apt-get install sqlite3 libsqlite3-dev
- myapp/Gemfileでコメントされている'therubyracer'のコメント解除
- sqlite3をインストールする
$ cd myapp $ bundle install // リトライする
bundleのインストールパスについて
後々知ったのですが、bundle管理のパスは設定でき、プロジェクト下のvendor/bundleに保持するのが定石のようです。
$ bundle install --path vendor/bundle
こちらを実行することで、プロジェクト下に.bundle/configファイルとvendor/bundleディレクトリが作成されます。 プロジェクト単位でパッケージ管理ができ、本来用途に近しい実装ができます。
rails serviceを起動
こちら最後につまずきました。 localhostがruby専用だったら問題ないかと思いますが、今回は既存を残しつつport:3000を提供しているので、-bオプションで以下のIPを指定します。
vagrant: ~/myapp $ bundle exec rails server -b 0.0.0.0
こちらのブログで説明されていました。
Vagrant で Ruby on Rails 4 の環境構築 - Qiita
補足・RubyMineにてVagrantプロジェクトを設定
JetBrainのIDEを以前から利用していたのでRubyMineも使ってみたのですが、非常に便利に使えそうです。
ここまでおこなうと、基底も含めてRailsのコードをメソッドジャンプできるようになります。 最初にフレームワークを把握するのに便利そうなので、ぜひとも最初に設定してみましょう。
Unity Cloudで自動ビルドからSlack通知までを試してみました
Unityビルドの悩み
これまで実機での確認はPCにAndroid端末を接続して行っていました。 ただ、こちらの方法だと以下の懸念がつきまといます。
- ビルドが環境に依存する。(ProjectやSceneを保存し忘れる、Unityバージョンを揃えそこねるなど)
- 複数のプラットフォームでのビルドが手間。
- ビルド中、何も出来ない。
- テストビルドを他人に共有しづらい。
業務での開発であればビルドサーバーを用意することで連携をとっていると思いますが、個人開発だとそこまではなかなかできませんでした。 ところが最近、UnityのCloud Buildを利用することでこれらを一気に解決することができました。
https://unity3d.com/jp/services/cloud-build
基本的には無料で使える!
Asset Storeなどに登録していれば、同様のアカウントで利用が開始できます。 Unityでプロジェクトを作成し、Accountとのひも付けを行う方法がもっとも手っ取り早いです。
- 右上ボタンからアカウントを設定できます。
- アカウントを設定すると、Serviceウィンドウ(⌘0キーで表示)にクラウドプロジェクトを作るボタンが出てきます。
- 既存プロジェクトと結びつける事もできます。
- 「Select organization」ではプロジェクトの所属する組織を選択します。
- こちらはアカウントに紐付く情報でチーム名など決めていただけば良いと思います。
事前にクラウド側で設定しておくことでプルダウン選択できます。→ https://id.unity.com/organizations
設定が完了すると、各ステータス表示画面になります。
- SETTINGタブで「UNITY PROJECT ID」が確認できます
この時点ではクラウド上にローカルプロジェクトと紐ついたシンボルができたに過ぎません。 Serviceウィンドウの右上に「Go to Dashboard」のリンクが出ていると思うので、そちらをクリックしウェブ側の設定ページを開きましょう。
GitHubやBitBucketと連携する!
上の続きで、Cloud Build設定ページから新規作成したプロジェクトを選んでください。 わたしは仮に「Test」を作成しました。
「さあ、始めましょう」から順次、コード管理のサーバーURLやコラボレータの設定ができます。 (GitHubやBitBucketが使えます) サーバーURLはgit@github.com:user_name/project.git のようなパスを与えてやることでチェックアウトが可能かを調べてくれます。 Privateなリポジトリの場合はUnityが発行した公開鍵をコード管理プロジェクト側のデプロイ鍵に設定する必要があるのでご注意ください。
プラットフォームなどの設定も完了するとファーストビルドが行われます。
フリープランのビルドはそこそこ時間がかかるのでしばらく放置しておきましょう。 グリーンのチェックが入ればビルドは成功です。 (失敗・成功かかわらずオーナーにはデフォルトで完了メールが飛んできます)
メールやSlackでビルド完了を通知、テストユーザーも複数登録できる!
メールはデフォルトでオーナーに送信、それ以外のアドレスも「コラボレータ」タブから追加できます。 Slackは「Notifications」タブにあるボタンから設定できます。
開発用にチャンネルを作り、コードのコミット、ビルド結果などを纏めておくと非常に便利です!
現在の難点は無料だとビルドの連投ができず、1時間に1回程度までの制限があります。 とはいえ、これだけの機能が無料で利用できることは非常に便利ですし、個人開発も捗りますw
今後も良い機能がどんどん無料提供されていくことを願いつつ、技術習得に日々邁進していきたいと思います。
さくらVPSの独自ドメインサーバーからgmailにメールを転送
さくらVPSで独自ドメインを取得していたのですが、メールアドレスとして利用していなかったのに気づき、せっかくなので設定してみました。 これまでメールサーバーを構築したことがなかったので、基本的なことから勉強しました。
今回の要件
- さくらVPS独自ドメインでメールを受け取る。(仮にadmin@example.com)
- サーバー環境はubuntu、独自ドメインの設定(Aレコード)は終わっている。
- サーバーに持たず、gmailに転送する。
- セキュリティやフィルタの実装を考えると楽そうだったから。
マイルストーン
作業
PostfixとDovecotをインストールする。
// インストール $ sudo aptitude -y install postfix sasl2-bin dovecot-core dovecot-pop3d dovecot-imapd // postfixのconfigをカスタマイズ $ sudo cp /usr/lib/postfix/main.cf /etc/postfix/main.cf $ sudo vi /etc/postfix/main.cf // リスタート $ sudo service postfix restart // dovecotのconfigをカスタマイズ $ sudo vi /etc/dovecot/dovecot.conf $ sudo vi /etc/dovecot/conf.d/10-auth.conf $ sudo vi /etc/dovecot/conf.d/10-mail.conf $ sudo vi /etc/dovecot/conf.d/10-master.conf $ sudo vi /etc/dovecot/conf.d/10-ssl.conf // リスタート $ sudo initctl start dovecot
いろいろ割愛しましたが、configの設定は以下を参考にさせていただきました。
- http://www.server-world.info/query?os=Ubuntu_14.04&p=mail&f=1
- http://www.server-world.info/query?os=Ubuntu_14.04&p=mail&f=2
MXレコードを追加
さくら会員メニュー「会員メニュー > ドメイン > ネームサーバメニュー」からMXレコードを追加する。 追加方法はさくらVPSにキャプチャー付きで掲載されていました。
転送設定
$ sudo vi /etc/aliases $ sudo cat /etc/aliases # See man 5 aliases for format admin: xxxxxxxx@gmail.com # 転送元メールアカウント: 転送先にしたいメールアドレス postmaster: root $ sudo newaliases
挙動確認
tail -f /var/log/mail.log
上記エイリアス設定で、admin@example.com宛メールがxxxxxxxx@gmail.comに転送されます。
Go言語を試してみる
インストール
Macで実行環境を構築するにはbrew installが簡単そうだったので、こちらを試しました。
$ $ brew install go ==> Downloading https://homebrew.bintray.com/bottles/go-1.5.2.el_capitan.bottle.tar.gz ######################################################################## 100.0% ==> Pouring go-1.5.2.el_capitan.bottle.tar.gz ==> Caveats As of go 1.2, a valid GOPATH is required to use the `go get` command: https://golang.org/doc/code.html#GOPATH You may wish to add the GOROOT-based install location to your PATH: export PATH=$PATH:/usr/local/opt/go/libexec/bin ==> Summary 🍺 /usr/local/Cellar/go/1.5.2: 5336 files, 273M $ go Go is a tool for managing Go source code. :
入りました。
パスを通す
~/.bashrcなどに追記しておきます。
# golang export GOPATH=$HOME/.go export PATH=$GOPATH/bin:$PATH
Hello World
公式のコードをローカルで動かしてみます。 https://golang.org/
// You can edit this code! // Click here and start typing. package main import "fmt" func main() { fmt.Println("Hello, 世界") }
そのまま実行とビルドしてからの実行をテスト
$ go run hello.go Hello, 世界 $ go build hello.go $ ./hello Hello, 世界
自動整形を試してみる
スペースを詰めてみる
func main(){
↓fmtを実行
$ go fmt hello.go
戻される。
func main() {
改行してみる
func main() {
↓fmtを実行
$ go fmt hello.go:8:1: expected declaration, found '{' exit status 2 $ go build hello.go hello.go:8:1: expected declaration, found '{' exit status 2
ビルドすらできない。
このあたりがPHPと違って素直に嬉しい。 しっかり基礎を覚えて、きれいにコードを書いてみたい。
日本語訳のチュートリアルを見つけた。 http://go-tour-jp.appspot.com/welcome/1 とりあえず、ここを頑張ってみようと思う。
gitのcommitをまとめる
プルリクエストを出すまでの過程で細かい手直しが塵ツモでcommit履歴が伸びてしまうことが多々ありまして、対処方法を調べました。
rebaseで纏められる
まず基点となる
git branch --set-upstream-to=origin/master
HEAD~3は先頭から数えて3コミット分束ねるとき。
git rebase -i HEAD~3
1行目の実行で下記のような内容がエディタで開く。 1〜3行目の先頭がpickとなっているので、こちらをs(squash)とする
1 pick 7002a5a photo upload 2 s 0f91ae4 create object url util 3 s 8a69966 use Array.property.map.call instead of $.map for Object 5 6 # Rebase c6f1e29..8a69966 onto c6f1e29 ( 3 TODO item(s)) :
エディタを保存するとログの書き換えが実行(commit)される。 新しいcommitログをpushする際はpush -fを使う。
注意点
まとめると言うよりは新しい履歴による上書きなので修正を飛ばさないように注意。
aws-sdk-phpを使い、SimpleEmailServer(SES)にてsendEmail
前回aws-sdk-phpの3系の扱いでつまずいたので、SESクライアントをサンプルにインスタンスの生成についても記載しておきます。
元の情報ページ
http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.Ses.SesClient.html#_sendEmail
インストールするもの
以下が必要になります * aws-sdk-php(Composer等で取り込み) * curl(apt-get install php5-curl で取得しました)
実際のコーディング
client = new SesClient(array( 'region' => 'us-west-2', 'version' => 'latest', 'key' => 'xxxxxxxxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxxxxxxxx', ));
3系からaccess keyやsecret keyは環境変数より取得するようになりました。こちらはAWSサーバーで他サーバーへのアクセス権限を追加する際と同じ仕様ですが、API利用時にパラメータで送ってテストしたい場合は2系同様、上記のようにキーを設定することも可能です。
$result = $client->sendEmail(array( // Source is required 'Source' => 'string', // Destination is required 'Destination' => array( 'ToAddresses' => array('string', ... ), 'CcAddresses' => array('string', ... ), 'BccAddresses' => array('string', ... ), ), // Message is required 'Message' => array( // Subject is required 'Subject' => array( // Data is required 'Data' => 'string', 'Charset' => 'string', ), // Body is required 'Body' => array( 'Text' => array( // Data is required 'Data' => 'string', 'Charset' => 'string', ), 'Html' => array( // Data is required 'Data' => 'string', 'Charset' => 'string', ), ), ), 'ReplyToAddresses' => array('string', ... ), 'ReturnPath' => 'string', ));
こちらはドキュメントにある通り、メール送信に必要なパラメータです。 text、htmlメールどちらも送信できます。
受信にかかわる設定
サンドボックスモードの際はホワイトリスト方式で上記メソッドの実行が可能です。 AWS>Service(SESを選択)>EmailAddress>Verify a New Email Address にてテストに利用するアドレスの追加が必要です。
aws-sdk-phpを利用する際のバージョンについて(2系、3系)
aws-sdk-phpを利用する際にバージョン関係の把握や、実装方法の検討に時間をとってしまったのでメモしておこうと思いました。
最新バージョン・ドキュメントの確認について
GitHubで公開されているものがもっとも新しいです。
Releaseバージョンもあるので、Composerで利用できます。ドキュメントについてもReadmeにリンクが記載されているUsers Guideが最新と考えていいでしょう。
バージョン3におけるバージョン2機能の包括について
バージョン2はバージョン3に包括されていました。
このブログを書いている時点で最新はVer 3.0.10とVer 2.8.13でした。一応両系とも保守対象となっている模様。←これもあり、最初は併用するものと勘違い
ちなみに1と2については併用可能と明示されていますが、2と3はnamespaceがぶつかるからやめたほうがいいです。
http://aws.amazon.com/jp/sdk-for-php/
3系で2系が動くロジック
https://github.com/aws/aws-sdk-php/blob/master/src/Ses/SesClient.php
SesClientのコードを見た時、「あれ、開発中なのかな?」と思ってしまったのですが、3のみでちゃんと動きました。
https://github.com/aws/aws-sdk-php/tree/master/src/data
Jsonで過去バージョンのフォーマットが入っており、現行で動作するようにラップしてくれてるようですね。結構泥臭いですね…(^_^;)
結論
AWS SDK for PHPをこれから利用するのであれば3系のみを使えば良い。
(ただしPHP>=5.5)