進撃のデプロイ
こんにちは、開発チームの太田です。 先週末に進撃の巨人の劇場版が始まりましたね。
僕は1年前ぐらいから進撃の巨人にハマりだして、一気に単行本とアニメを読み尽くしました。 劇場版も見に行こうと思っていたのですが、友達を誘ったら「え?アニメの短いバージョンでしょ?意味なくね?」なーんて言われて「やーい!バーカ!バーカ!もう絶対誘わないもんね!」とか思っていじけ気味です。
そんな進撃の巨人ですが、最近進撃の巨人的な出来事に出くわしました。 壁です。ウォールです。「ウォール・SSHkiterror」的なアレです。
え?前提条件がないから全然話がつかめない?そうですよね。 話が前後しますが僕の状況を説明しますね。
状況
過去の僕のエントリーを見てくださった方々はだいたい知ってると思うので読み飛ばしてください。 今年の10月にジェネストリームに入社していきなりチームコラボレーションサービスの責任者をいきなり任せられまして、「ちょwwwうれしいけどrailstutorialしかやったことないですけどwww」とか思いながら、プルリクなどなどで諸先輩方からの指摘をもらいつつ、日夜もくもくとrailsと格闘しながら開発をしてます。
話をもとに戻すと…
で、壁です。ウォールです。 総称「ウォール・デプロイ」です。
いやー、参りましたよ。 アプリできたったー!とかぬか喜びしてたら、ウォール・デプロイが漫画的に書くと「バババババアアァァァンッ!!!!!!」って何層にも渡って出てくるんだもん。
(´・ω・`)
(´・ω・`)
(´・ω・`)
(´・ω・`)
(´・ω・`)
って感じです。 で何を書こうと思ったら一瞬忘れかけたのですが、今回のエントリーでは進撃の巨人的な感じで「進撃のデプロイ」ということでデプロイで遭遇した壁たちと、それをどのように突破したか(安心してください。「鋼の巨人的なタックルで…」とかは書きません。まじめに書きます。)を書いていきたいと思います。
「太田、いろんなツールに手を出す」編
第1の壁「ウォール・ansible」
今考えれば、ただのSSHの問題だったんじゃねーかとめっちゃ思いますが。。。 一番最初は、@kgmyshinのこの記事を読みながら、モダンにansibleを使って既に立ち上げ済みのEC2インスタンスにまとめてデプロイしちゃえ!とか思いました。「これできたらちょー楽勝じゃん!」みたいな。
んで、魔法使いになった気分でansible-playbook playbook-productionn.yml
ってやっても返ってくる答えはいつもFAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue
ばっかり。
結果
それで諦めました。インスタンスの立ち上げから1年以上離れていて、かつrails環境のデプロイを一度もしたことのない俺氏にとってはその時はハードルが高かったのかな〜と。
第2の壁「ウォール・自作からのアップロード」
これも今考えればSSHの問題でしたね。きっとそう。 一晩かけてこの記事とか参考にしながらいろいろインスコったんですけど、最後にsshでアプリケーションをアップロードするところで「あれ?どうやるの?」みたいな。
cyberduckとかfirezillaとかFTPソフトを使って接続しようとしてもエラー、エラー、エラーで。その時は解決策が見つからなくてこれも「スキル・諦める」を選んで
結果
やめました。
「太田、capistranoで頑張る」編
第3の壁「ウォール・SSHKitError」
最終的に今いろいろやってるのがこのcapistranoです。 一晩かけて上の2つをやって朝方「詰んだ(´・ω・`)」ってなってた時に先輩エンジニアの徳山が「capistano使ったらどうっすか?」みたいなことを言ってくれたのがきっかけでしたね。
徳山が持っている「パーフェクトRuby on Rails」にもcapistranoのやり方が書かれていたので「これはいい!」と思って実装したのですが、「あれ?」みたいな。何度bundle exec cap staging deploy
やっても、出てくるエラーはSSHKit::Runner::ExecuteError
ばっかり。
「てめー!言うこと聞けや!」とか思っても、プログラムなんで出てくるエラーが変わるわけもなく。それで泣きそうになりながら徳山に聞いたら、「configファイル見せてください」と。で「このホスト名変えたらどうですか?」って言われて修正したらこれがヒット。すんなり通りました。それが以下のとおり。
Host hogehoge #アプリ名 HostName ec2-xx-xx-xxx-xxx.ap-xxxxxxxxx-x.compute.amazonaws.com User fugafuga Port 00 UserknownHostsFile /hoge/hoge StrictHostKeyChecking no PasswordAuthentication no IdentityFile ~/.ssh/id_rsa.pem IdentitiesOnly yes ForwardAgent yes
Host ec2-xx-xx-xxx-xxx.ap-xxxxxxxxx-x.compute.amazonaws.com HostName ec2-xx-xx-xxx-xxx.ap-xxxxxxxxx-x.compute.amazonaws.com User fugafuga Port 00 UserknownHostsFile /hoge/hoge StrictHostKeyChecking no PasswordAuthentication no IdentityFile ~/.ssh/id_rsa.pem IdentitiesOnly yes ForwardAgent yes
わかります?一番上のHostをHostnameと同じにしてます。 これでSSHKit突破したぜー!と思ったら早速第4の壁が出てきました。
第4の壁「ウォール・permission denied」
capistranoってコマンドを仕込んでおけば勝手にdirectoryとか作ってくれるんですが、そこで起きたのがたしか「permission denied」。これが出たらスマートなやり方ではないんですが、サーバーに入って手動でchown -p fugafuga:fugafuga /var/www
ってやっていけたと思います。
第5の壁「ウォール・permission denied2」
次に出てきたのが、capistranoがbundle installしてくれてる時だったと思います。こちらもうろ覚えです。ごめんなさい。そんな時はこちらも同じくスマートではありませんがサーバー側でmysqlのユーザーとDBを作ってあげればおkです。
「太田、nginxを使ってみる」編
第6の壁「ウォール・directive error」
capistranoがうまくいってもnginxの設定ファイルは作ってくれないんですよね。こういうところも自動化したいのであればやっぱりvagrantとchefを使った方がいいんじゃないかと思いますけど、今回はそういう時間もなかったので手動でnginx.confを作りました。
nginxの設定ファイルになるとネット上に情報が点在しまくってて、いろんなページを参考にしていましたが、最終的に代表の秋貞におねだりして買ってもらったこの本が一番役に立った気がします。pixivさん最高!
そうそう、表題のdirective errorですが、httpの外にserverの設定ファイルを書いたりするのがnginxの規約上NGらしく。emergeとか怒られました。とは言いながらもeventは外に書けるんですけどね。でこれは簡単でserverの情報をhttpの中に入れてあげるだけ。nginxについては日常的に使うことになりそうなので、本を一冊買ったほうがいいかもしれないと思ってます。
結論
とまあ気づいたら4000文字も書いてしまって、しかも進撃の巨人風に書こうと思ったら、サザエさん的な要素もぶっこんじゃって読者のみなさんにはいろいろと混乱をさせてしまったかもしれませんが、まあこんな感じで僕は進撃の巨人になったつもりで、デプロイの壁を諦めたり、時にはちゃんと突破しに行ったよっていう話です。
qiitaじゃないんでかなりストーリー的になってしまい、実務で調べるっていうシチュエーションでは可読性がめっちゃ低いものになってますが、いつかきっとqiitaにもまとめる日が来ると思うので、qiitaにまとめたら見てみてください。
ちなみに僕のアカウントはこちらです。
それではここらへんで。
Rails4.1.6でGoogle Calendar API v3とfullcalendarに新規で予定を反映させる方法
fullcalendarの情報が日本語だと少ないのでみなさんと共有できればと思います。
参考人なりましたら幸いです。
fullcalendarにイベントの登録する方法。
空いている時間帯をクリックして登録するまでの処理の流れ
1.空いている時間をクリックするとタイトルの入力画面がモーダルで出る
2.タイトルを入力して『OK』ボタンを押す
3.GoogleCalendarとfullcalendar両方に反映させる
大きく分けてこの3つになります。
クリックした時の処理
fullcalendarの空いている時間をクリックした時の処理は
select:
を使います。
ちなみに他のクリックイベントは
月のカレンダーで空いている日に終日予定を入れる場合 => dayClick
イベントをクリックした場合(更新とか削除の時に使用)=> eventClick
にそれぞれ処理を書きます。
今回は新しく週カレンダーに時間単位で予定を登録してみます。
selectイベントの処理を書く
calendar.js
select: function(start, end, allDay) { var title = prompt('タイトルを入力してください'); if (!allDay) { $('#calendar').fullCalendar('renderEvent', { title: title, start: start, end: end, color: 'pink', allDay: false }); } else { $('#calendar').fullCalendar('renderEvent', { title: title, start: start, end: end, color: 'pink', allDay: allDay }); }; $('#calendar').fullCalendar('unselect'); $.ajax({ url: '/api/gcals/create_event_self', type: 'POST', dataType: 'json', data: { title: title, start: start, end: end }, }) },
終日をクリックしたかどうかで条件分岐しています。
fullcalendarにイベントを表示させるのはrenderEventです。
まずはrenderEventでクリックした時間帯の色を変えて分かり易くします。
そのあとGooogleCalendarApiにAjaxで投げてGoogleCalendarにも
反映させます。
続いて2、3の処理
gcals_controller.rb
def create_event_self event = [ current_user[:email], params[:title], params[:start], params[:end] ] #UserのGmailが必要になるのでcurrent_user[:email]でmodelに渡す new_event = Gcal.new.insert_event(event) end
gcal.rb
def insert_event(event) #UserのGmailを受け取るので引数が必要 email = event[0] start_time = DateTime.parse(event[2]) end_time = DateTime.parse(event[3]) event_resorces = { 'summary' => event[1],#fullcalendarのtitle 'start' => { 'dateTime' => start_time }, 'end' => { 'dateTime' => end_time }, } result = @client.execute(:api_method => @service.events.insert, :parameters => {'calendarId' => email }, :body => JSON.dump(event_resorces), :headers => {'Content-Type' => 'application/json'}) end
routes.rb
post 'gcals/create_event_self' => 'gcals#create_event_self'
これで好きな時間帯にイベントを登録できるようになりました!
なお初心者のため、もっとこう書いた方が良いなどございましたら
ご指摘いただけると嬉しいです。
【Welcome to the accelerated world!!】Android Studioを入れたら必須でやる事リスト for Mac
こんにちは、つい最近購入したnu boardが便利すぎて絶賛感動中の釘宮です。
今回はAndroid Studioを入れてまずやるべき事と+αをご紹介します。
これを設定しておかないと常に地味にストレスがたまります。
ちりも積もればなんとやらなので早めに設定しておきましょう。
オートコンプリートを使えるように設定しましょう
Android Studioのオートコンプリートのショートカットキーの初期設定は「Ctrl + Space」となっていて、
これはSpotlight検索のショートカットキーと被っており、
さらに実際に押してみるとSpotlight検索の方が優先されてしまいます。
つまるところ初期設定のままではオートコンプリートは封印されていますのでその封印を解いてあげましょう
下記の手順で変更可能です。
- [Preferences...] を選択
- [Keymap] を選択
- [Comp]と入力
- Main Menu - Code - Completion - Basic を右クリック
- Add Keyboard Shortcutをクリック
- [Second Stroke」にチェックを入れて、 「Command + Space」を押下
- Main Menu - Code - Completion - Smart Typeも同様に
- [Apply]押して[OK]
フィールドのプレフィックスに[m]を設定しましょう
Androidのコーディング規約で
- 非パブリック、非スタティックフィールドの名前は m で始める。
- スタティックフィールドの名前は s で始める。
を採用しているところは多いのではないでしょうか?
これの問題はフィールドを選択してSetter, Getterを自動生成した際に
private int mHoge; public int getmHoge() { return mHoge; } public void setmHoge(int mHoge) { this.mHoge = mHoge; }
と言う風に関数名がうまくいかないところです。
これを防ぐ為に下記の設定を行います。
- [Preferences...] を選択
- [Code Style]を選択
- [Java]を選択
- [Code Generation]タブを選択
- NamingのFiledのName Prefixに「m」を入力
- 同様にStatic Fieldに「s」を入力
- [Apply]押して[OK]
これで下記のように正常に生成されるようになります。
private int mHoge; public int getHoge() { return mHoge; } public void setHoge(int hoge) { mHoge = hoge; }
CheckStyleを導入しましょう
常にコーディングスタイルの乱れをチェックできるようにします。
- [Preference] を選択
- [Plugins]を選択
- 検索窓に[CheckStyle]と入力
- [Nothing to show.Click Browseto search for non-bundle plugins.]と表示されるのでBrowseをクリック
- [CheckStyle-IDEA]を選択して[Install Plugin]を選択
+α
コードを書く早さが早いと言われるのはうれしいことでありますが、もっとできるもっと早いエンジニアはもはや書かないのではないかと最近考えています。
書かないための第一歩として、テンプレートをためる事を意識してみましょう!(と最近、自分に言い聞かせてます)
Live Templateを使おう
いわゆるスニペットなんですが、Live Templateという名前になっています。
3回以上書くならすぐに登録しましょう。例えばContentProviderなどからCursorオブジェクトを取ってdo-whileなどでぐるぐるまわしたい事ってよくありますよね?
僕はLive Templateに下記を登録しています。
if (cursor != null && cursor.moveToFirst()) { do { $IMPL$ } while(cursor.moveToNext()); } if (cursor != null) { cursor.close(); }
ifcの三文字を打てばこれが出るようになっています。
File Templateを使おう
スニペットレベルでなくてファイルレベルで毎回同じ事書いてるなって思ったら即登録しましょう。
例えばContent Providerなどって約150行くらい毎回ほぼ同じ事書いてませんか?
しかも毎回覚えてなくて、前回のコード見たり調べたりしてませんか?
一度登録すれば調べて150行くらい書き写す時間がたったの数秒です。
フィジカル・フル・バースト レベルです。
Content Provider以外にもデザインパターンなどにももってこいと思います。
詳細を下記に書いているのでぜひ見てください!
【Android】もっと先へ「加速」したくはないか、少年 〜File Template編〜 - Qiita
まとめ
経験値(テンプレート数)を増やして加速世界の王をめざしましょう!
新人向け Gitを楽に使えるようになるために
こんにちは徳山です。最近Gitの操作でつまづいて時間をとられているのをよく目にします。開発を楽に進めるためのツールで逆に苦労していて本末転倒になってしまってもったいないと思っています。
つまづいてしまっている原因
何故つまづいてしまっているのか考えてみるとこの辺りじゃないかと思います。
- ターミナル操作に不慣れ
- 概念やコマンドなど覚える事が沢山ある
- コマンドがどんな操作をするのかイメージを持てていない
- 何のためにGitを使うのかよくわかっていない
Gitを使って何をするのか
Gitでやることはコードの変更の歴史を使いやすいように作っていくことです。
そのために今の状態がどうなっているか確認し、どう変化させたいのか考え、適切なコマンドを使います。
よくつまづいている人は今の状態 (各ブランチのログ, 今参照しているコミット, indexにaddされた変更, working treeで行った変更) をちゃんと確認せずに、どうなるかイメージ出来ていないコマンドを実行している事が多いように思います。
慣れるまでは毎回コマンドを実行する前後で意図通りに変更出来たか確認しましょう。
道具を上手く使って楽をする
とても強力なシェルzshと、zshを使いやすいようにカスタマイズしてくれるoh-my-zshを導入しましょう。
ターミナルの操作に慣れていない人はシェルとかカスタマイズとか言われてもよくわからないし怖いと感じるんじゃないかと思います。そんな人にこそ使ってもらいたいです。
Gitを使う上でzsh + oh-my-zshから受けられる恩恵
今の状態の可視化
プロンプトに今checkoutしているブランチの名前やコミットされていない変更があるかなどを表示してくれます。
oh-my-zshでコマンドを楽に入力する
Gitの便利なコマンドに別名(alias)を設定してくれます。良く使うものは
gst
:git status
の見やすくなるオプションつきaliasです。
僕はことあるごとに指が勝手にgst
を押して今の状態を確認しています。gd
:git diff
です。gdc
はgit diff --cached
です。どちらもよく使います。glog
:git log
の一行版に色と装飾とブランチのグラフを付けたものです。gco
:git checkout
です。gco master
のように後ろにブランチ名を付けて使います。
他にも便利なaliasが沢山あります。alias
コマンドで確認できます。
tabキーでコマンドやブランチ名の補完
zshの機能でコマンドの補完があります。コマンドを途中まで打ってtabキーを押してみて下さい。
残りが自動で入力されます。候補が複数ある場合はタブを2回以上押すと候補が表示されて選択できます。
oh-my-zshのgitプラグインを使うように設定しているとブランチ名も補完されるようになります。
先ほどの gco
の後にブランチ名を途中まで打ってtabキーを押すと自動で入力されます。
導入方法
以下の記事に纏まっています。
(4)プラグインを使うの plugins=()
に git
を含めるところまではやりましょう。
他に参考になる資料
コマンドのイメージをつかむ
教科書
知っておくと理解が早まるGitの仕組み
少し難しくなってしまうのですがGitの仕組みを何となくでも知っていると各コマンドが何をするのかのイメージがしやすくなります。
そもそもコミットってなんだろう?どんな情報を持っているの?どこに保存されているの?とかそういう話です。余裕があればこの辺りも軽く見てみるといいと思います。
Rails 4 + Devise 3でエラーが出続ける5つぐらいの理由
こんにちは。ジェネストリームの太田です。
そういえば最近、Railsでサービスが開発されるケースが増えてますよね。スタートアップ界隈だけかと思ったら、業務系も最近はRailsでシステムを開発するケースも多いとか。
かくいう当社も、トレンディにRailsを使ってサービスを開発しており、実際に私もRailsまみれになって日々コードを書いているわけなんですが、最近認証周りでドハマりしたのでそこらへんの話でもしようと思います。 主役はそう、第四世代の認証うんちゃらライブラリとか言われているDeviseさんです。
前説
RailsでWEBサービスを開発している当社は、当然ながらRailsでプログラムを書いたことのあるエンジニアがいます。
しかし、もともとはPHPとか、Android開発メインでRailsガッチリやってました!的なエンジニアはおらず、そのため「あんたバカァ?deviseなんて朝飯前なのよ!わかったさっさと書きなさいよ!」といったかんじで、僕がシンジくんならアスカ的になじってくれるような人はいないわけであります。
第3使徒が襲来した時に使徒と戦ったことのあるエヴァがいなかったように、deviseが必要になったときにdeviseと戦ったRailsエンジニアがいないので、「逃げちゃダメだ、逃げちゃダメだ…」と思って、deviseに人柱になって立ち向かうしかないのであります。
いやー、そしたら突然、エヴァから寅さんですよ。
「人柱はつらいよ」
まさに「orz」状態なわけです。消しても消しても消えないエラーラッシュ。たたみかけて襲ってくるエラーラッシュ。パズドラのゴッドラッシュ、ヘララッシュ、デビルラッシュを凌ぐぐらいのラッシュ具合で完全「OMG!!!!!」って叫びたくなってくるのであります。使徒で言うと新劇場版で言う第5使徒と第13使徒が一緒に襲来してくる感じ。
しかし、まことしやかにささやかれる「Railsの認証と言えばDeviseっしょ!」っていう都市伝説。「ほんとに??それ、ほんとに??」女子高生が憧れのイケメン先輩席の後ろからパソコンの操作方法を教えてもらうときと同じぐらいの感覚で、この次の展開はなんなんだろう、光が見えてくるのではないだろうかと期待してしまうわけであります。
でやりましたよ、ええ。そしたらね、
・
・
・
(つд⊂)ゴシゴシ
・
・
・
(つд⊂)ゴシゴシ
・
・
・
( ゚д゚)ポカーン
ってなりました。
「え?ちょ、え?さflkjsdf;:ぁdlkがds;lkg超絶×3簡単じゃんかよおおおおおおぉぉぉぉぉぉ!」
ええ、やっぱりDeviseさんは便利でしたよ。「Railsの認証といえばDevise」という都市伝説は都市伝説ではなかったということです。 ただね、そこに至るまで
NA・GA・SU・GI・RU
ってことで前置きがめっちゃ長くなりましたが、その旅路で出くわしたksエラーどもとかその対処法とか、エラーは出てないけどやらなくていいこととかを紹介したいと思います。
前提
太田スペック
やろうとしていること
状態
gem 'devise' gem 'omniauth' gem 'omniauth-google-oauth2' gem 'omniauth-facebook'
$ rails g devise:install $ rails g devise user
とりあえずgoogle認証はできている感じ。これから手入力を実装したい。
エラーとか不要なこととか
model、DB周り
remember_tokenがいらない
えっとですね、「rails初学者」という言い訳を盾のように使うと、認証の仕組みなんてrailstutorialで書いたやつをそのままコピペすりゃいいじゃん!」とか思うわけなんです。ただdeviseを入れるとそんなものは不要です。
password_digestがいらない
railstutorial.jpを勉強した人にはお馴染みのpassword_digest。しかしdeviseがその代わりとなる「encrypt_password」を作ってくれるのでこれもいりません。
controller周り
users_controllerの中のnew、createメソッドがいらない
これは衝撃的でした。「ふぁ!?」と思いましたが全部deviseパイセンがやってくれるようです。ありがたや。
sessions_helperがいらない
セッション管理もdeviseパイセンがやってくれます。
view周り
ユーザー登録、ログイン、ログアウトの画面がいらない
下記をターミナルで実行すれば勝手に上記のviewを作ってくれます。便利!
rails g devise:views
その他viewから推測されるいらないやつ(未検証)
- ユーザー編集画面がいらない?(写真を見る限りいらなそうですよね…)
- パスワード変更画面がいらない?(同上)
まとめ
- deviseパイセン、最初は苦戦してましたが使ってみるとめちゃくそ便利ですね!「これからrails使うぞ!」って方がいれば是非参考にして頂ければと思います。
ハッカソンという言葉がゲシュタルト崩壊するレベルでハッカソンをお勧めする回
こんにちは、釘宮です。
私事ですが、今年になってからいくつかのハッカソンに出場させていただいております。 特に最近はありがたいことにあるハッカソンで最優秀賞を頂いてシリコンバレーツアーが決まったり、 他のハッカソンでカラオケの優待券もらったりしてます。
(全てメンバーの方々のおかげさまです!ありがとうございます!)
本日はハッカソンが気になってるけど、出た事ない人向けにハッカソンがどんなものなのかを書いてみたいと思います。
なぜハッカソンにでないのか?
きっとハッカソンが気になってるけど、出場に踏み切れない理由の多くはこれじゃないでしょうか?
「どんなレベルの人がでるのかわからない。もし出てみて自分が全く使えない状態だったらどうしよう。。」
私もそう思っていた時期がありました。確かに躊躇してしまいますよね。
実際いくつか出てみた私の感想を言うと、心配ご無用です。
html組めるだけで十分戦力になります。
確かに超ハイレベルな人も稀にいますが、かといってバックからフロントすべてハイレベルってわけではないですし、そもそも稀です。
感覚的ですが「プログラミングを初めて1年以上の人は何の問題もない」です。
ただそれでも躊躇してしまう方は、アイデアソンから出場してみるのも手だと思います。 ハッカソンの雰囲気でてますが、いっさいモノは作らないのでもってこいです!
(しかも場所によっては食事やお酒もでる神対応!)
ハッカソンに出る事のデメリット
「時間を取られる」ということオンリーです。
ハッカソンに出る事のメリット
たくさんあるので箇条書きしたいと思います。
・業務外でのエンジニア仲間ができる
・実績ができる
・刺激される、知識の幅が広がる
・力試しができる
・時間のマネジメントに強くなる
等々いろいろありますが、大きくは上記にあげたものだと思います。
一言にまとめるとハッカソンはエンジニアとしての成長の加速につながります。
ハッカソンで気をつける事
あまり気にしすぎてもあれですが、結局だれと組むか?に尽きると思います。
とはいえ、初対面の方々ばかりだと思うので自分の直感を信じましょう!
人見知りの方は、気の置ける友達でると良いです。
友達居ない人は僕を誘ってください笑
ハッカソンでこれができたらかっこいい!(気がする)
ハッカソンで地味に時間を取られるのがサーバーのセットアップだったりします。場合によっては1時間取られたりしますがハッカソンの1時間はかなり大きいです。
既にある誰かのサーバーを使う場合はそうでもないですが、新しく立ち上げる場合は一から環境を作らないと行けないのでやはり手間です。
そんなときに便利なのが ansible などの構成管理ツールです。
mac内に aws用railsの環境構築playbookなど入れておくと、コマンド一発でサーバーの環境構築をできたりします。
サーバーがsakuraの場合でもほぼhostsの設定を変えるだけです。
ansibleのplaybookを作った事ないけどコマンドを叩いた事があるレベルの私でもこれくらいのことがさくっとできるので本当にお勧めです。
使い方などは前にqiitaにまとめてみてるので下記を参照ください。
ansibleを使った事ない僕がansibleつかってawsにRails + Nginx + Unicorn 環境をセットアップをしてみた(まさかの手動あり) - Qiita
まとめ
ハッカソンは楽しくプログラミングしながら自己成長できるめったにない環境です!
出た事ない人は一度で良いから出てみましょう!
おまけ
弊社ジェネストリームでも変わり種ハッカソンを企画しておりますので乞うご期待!
WebアプリエンジニアがAndroidアプリ開発を始めるときに見た本・サイト
こんにちは徳山です。1ヶ月前からAndroidアプリの開発をしています。それまではずっとWebの開発をしていました。
釘宮がAndroid開発の検索時の情報源を紹介していたので、私はAndroid開発を始めるにときに全体を把握するために参考にした本やサイトを紹介します。
環境構築からとりあえず動かしてみる
初めに触ってみて感じを掴もうと見ながら手を動かしました。 Android Studio, Android SDKのインストール, エミュレータの使い方,と開発の流れがわかります。
Androidプログラミング全般
mixiさんがGitHubに公開されているAndroidの研修用の資料です。わかりやすくまとまっていて概要を掴むのにとても役立ちました。
初心者向けの分厚い本が多いのに比べ小さくまとまっていて読みやすかったです。
Android Studioの設定・使い方
gihyo.jpの連載です。Android Studioの設定やプラグインのインストール、GitHubとの連携、.gitignoreの設定など幅広く解説されています。ずっとエディターにはVimを使っていたのでIDEに慣れるのに苦労しているので助かっています。
Java
Java自体初めてだったのでこれらの本も読みました。とても分かりやすく書かれていてプログラミング自体初めての方にもオススメです。プログラミング経験のある方だとコンパクトにまとまっているものの方が良いかもしれません。
Javaやるなら読んでおけと勧められた本です。良いJavaの書き方、使い方が載っています。
設計
ずっとWebフレームワークのMVCの上で開発していたのでAndroidアプリの設計をするにあたりデザインパターンも学び直しました。
特集のAndroidアプリ開発最前線の2章あとで苦労しないための設計と実装を参考にしました。
おわりに
まだAndroidの世界に入ったばかりですがWebとAndroidの違いがとても面白いと思ってます。
以上お世話になっているサイト・本でした。