2013年2月25日月曜日

自分でコンパイルしたRubyをrbenvで管理する(Mac OS X)

Qiitaに書きました。

2013年1月30日水曜日

Railsプログラマへの道

Railsでアプリケーションを作ろうと思うと、Rubyだけでなく色々な前提知識が必要です。
必要になる知識と、私がそれをどうやって学んできたかを書きたいと思います。

※過不足あるかと思います。参考程度に。

Web(http)の知識

Ruby on RailsはWebアプリケーションフレームワークですので、当然Webアプリケーションを開発します。
Webとは何なのか。httpって何か。ブラウザとWebサーバーは何をしているのかという知識は必須です。



結構古い本ですが、いまでも役に立つ知識が豊富です。
HTMLの文法についてや、httpの通信について詳しく説明されています。
マンガと、文章で書かれていて読みやすいし面白いです。
これを読めば、Railsが面倒なところを色々と隠ぺいしてくれている事が理解出来るはずです。
私が就職してすぐに、Webアプリ開発の仕事をなんとかやれたのは高校生の頃にこの本を読んでいたからだと思います。
これに書いてあるレベルの事を知らない同僚は苦労していました。
手に入りにくいとは思いますが、入手出来そうなら読んでみてください。おすすめです。

Rubyの知識

RailsはRubyでWebアプリケーションを作るフレームワークですので、Rubyの知識も必要です。
私はプログラミング言語を、C → C++ → VB6 → Ruby, Java → C#, VB.NET みたいな順番で学んだため、Rubyを初めて触った時にはプログラミング未経験ではなかったというのと、Rubyは1.6の頃からなんとなく時々ダラダラと10年くらい触ってて、毎日書くようになったのはここ1年少しという感じなので、「この本で入門した」という記憶がありません。

ということで、普通の意味の入門に何が良いのかか分かりませんが、今までに読んだRuby関連の本で良かったものを紹介します。




私が最初に買ったのは第2版でしたが第2版はruby1.8での内容ですので、こちらの方がいいです。
1.9版はメタプログラミングに関する記述も増えています。
(もうすぐ2.0がリリースされますが、1.8から1.9ほどの違いは無さそうなので
 2.0の本が出てから入門した方がいいとか、そういう事はないと思います)




次はこれ。入門本ではありません。
入門本ではありません。

大事なことなので二回言いました。

Ruby on Railsでアプリを作るための必須知識というわけではありませんが、読むとRuby力がレベルアップすること間違いなしです。
入門レベルのことは全て理解したとか、他のオブジェクト指向言語の経験があり、Rubyの文法もだいたい覚えたという人におすすめです。
私は後者のパターンですが、衝撃を受けました。
あまりに衝撃を受けたので、@patorash主催の読書会に参加してもう一度読み返してますが、やっぱり衝撃を受け続けています。

Railsの知識

やっとRailsです。
こんなに読まないと、入り口に立てないのかと思われるかもしれませんが、立てません!
というのは冗談で、本当は良くわかりません。
おそらくいきなりRailsの入門から初めて、バリバリプログラミングしている方も大勢居ると思います。
とにかく、下記に紹介する本を読んでみてください。
知識が足りないと感じたなら、上で紹介したような知識を身に付けてみましょう。



はじめる! Rails3(1)
黒田努
達人出版会
発行日: 2011-02-03
対応フォーマット: EPUB, PDF
はじめる! Rails3(2)
黒田努
達人出版会
発行日: 2011-09-05
対応フォーマット: EPUB, PDF
はじめる! Rails3(3)
黒田努
達人出版会
発行日: 2012-04-04
対応フォーマット: EPUB, PDF


一気に書きました。
私の場合は、はじめる! Rails3 1巻と2巻をまず読みました。
この二冊を読んで、あとはRails3レシピブックを辞書変わりに、毎日毎日仕事で書いたり
自宅で趣味のWebサービスを開発したりして、Railsに慣れていきました。

はじめる! Rails3 3巻では、Rails3.2の話になりassets pipelineの話も解説されているので
今の最新の環境に関する知識もバッチリです。

はじめる! Rails3ですが、プログラミングの本なので当たり前ですが
読むだけでなく、実際に自分のPCでプログラムを書いて、Railsを動かしながら読んでください。
著者のWebサイトにて、開発環境の構築や便利なツールの解説記事もあるので読んでみるといいでしょう。

おわりに

今回はRailsのプログラミングが出来るようになるまでを紹介したので書いてませんが、Railsは作ったものを公開するのがまた面倒だったりします。
私がいままでやったことあるのは、Heroku、Sqale、のPaasサービスに乗せるパターンと、自分でScientific LinuxにRailsが動く環境を作って、そこにデプロイするパターンです。
Scientific LinuxではWebサーバーにnginxを、アプリケーションサーバーにPassengerを使っています。Unicornというアプリケーションサーバーで構築したこともあります。
本番環境へのアップロードも何かと面倒なので、capistranoで自動化しています。
サーバー環境のRubyはrvmでインストールしたもので動かしています。
あとは、Gitも使えるようになるといいと思います。

本番環境への公開は、今回のテーマではないので詳しく書きませんが、上にあげたキーワードで検索してみると、いろいろな情報が出てくると思います。

2012年12月31日月曜日

2012年を振り返ってみる

「退かぬ! 媚びぬ! 省みぬ!!」

ではなくて、今年はまず転職が大きなイベントだった。
昨年の12月に会社を止めて、1月からリゾームに働いている。

正直前職の会社を辞めるつもりは全然無かったのだけど、@kazuhisa1976のtwitterでのRuby技術者募集のツイートに、非公式RTで 「ノ」 って書いたのがキッカケで転職してしまった。
こんなこと家族には言えないので、岡山Ruby / Ruby on Rails勉強会で知り合った@kazuhisa1976さんに誘われたことにしてある。

この転職で得たものはとても多かった。

・Railsでアプリケーション作れるようになった
・自分でサーバーをセットアップしてデプロイも出来るようになった
・テストを書くようになった
・早く帰るようになって、毎日ではないが自分のコードを書く時間が格段に増えた
・チームメンバー全員がプログラミングにすごく興味ある
・チームメンバー全員がプログラミングにすごく興味ある

大事なことなので二回言いました。
細かいこと言うと若干ニュアンス違うのだけど、大体合ってるはず。
ちなみにチームメンバーは、@LuckOfWise @kazuhisa1976 @patorash。
来年からは @zephiransasも仲間になる。
なんだこれ。何があった。奇跡か。

あと今年は家でコード書く時間が増えたのと、今年はアウトプットするぞーって目標にしてた成果(?)でWebサービスを2つリリース出来た。

My Dic
  英単語学習ツール
(2013/4/29 追記  My Dicは事情により閉鎖しました)

Lanze
 サーバー稼働監視ツール

どっちもRailsで。特にLanzeの方は大体の機能は1週間くらいで出来たし便利な世の中になったものだと思う。
実はもっとたくさ作るつもりだったし、100万くらい稼いでやる!と意気込んでいたのだけどその辺は全然駄目だった。ここで諦めず来年も頑張ろうと思う。
来年はWebサービスだけでなく、Androidアプリも作ろうと思う。最近入門してて何か作れそうな気がしてきたしネタも思いついたので。

良いことばかり書いてますが、いい事ばかりだったんだよ!
後は全部忘れた!

2012年12月5日水曜日

自動化は悪とか本気で思ってる人へ

大都会岡山Advent Calendar の5日目です。昨日はは@ryosms さんの記事でした。

ネタは何でもいいという事だったので、昨日の夜、会社からの帰路で
自転車漕ぎながら考えてたことをそのまま文章にします。

仕事の自動化でコンピューターに仕事を奪われちゃう人、
自動化したことで浮いた人を解雇して、人件費抑えて利益アップとか言ってる会社がありますね。
で、言ってる人の大半はネタで言ってると思うのだけど、「自動化は悪」という理屈。
でも本当にそういう理由で仕事を失った人から見たら、本気で自動化は悪と考える人も居るかもしれません。

雇用が減ってて不景気で国が悪いとかそういうのは置いておきます。
自分が出来る事を考えましょう。

自分がやってる仕事で何が自動化出来るのか、自動化されてしまうのか。
そこから把握しましょう。すでにコンピューターに任せれば人手なんて掛からない仕事をしているのかどうか、それを知らないといけません。
自動化されてしまうのか判断が付かないということは、コンピューターの知識が無いからだと思うのですが
そこは勉強するしかありません。自分で自動化出来るようになるほどの知識が必要なのではなく
自動化が可能かどうか知ることが大事です。
「書類整理 自動化」とか、なにか自分がやっている仕事と自動化というキーワードでググりまくるのも手かもしれないです。
こうやってアンテナを張ってにわか知識を詰め込んでいくうちに、自動化されなさそうな仕事もまた分かってくるでしょう。
こういう情報に敏感になるべきです。
仮に自分が今やっているすべての作業が自動化されてしまうものばかりだったとします。
そこで絶望しても仕方ないので、それ以外の仕事が出来るような知識なり技能なりを見つけないといけません。
でも、目の前の仕事が忙しくてそんな勉強が出来る時間は無いかもしれません。
(忙しさを理由に勉強しない人は、暇が出来ても勉強しないと思うのですが、まぁそれも置いておきます)
時間を作るにはどうすればいいか。
自ら会社に、自分が今やっている作業は自動化出来ることが多いので、自動化してくれと頼みましょう。
それによって空く時間で、勉強をしたいということも申し出ます。
他にも価値があることをやれるようになるしかないわけです。
ちなみにこういう意識転換をせずに、根性で今の倍働いて成果を出そうとする人がいますが
それはまったくの間違いです。
最高でも成果は倍にしかなりませんし、そのうち死んでしまいます。
死ななかったとしても、残るのは倍働いていた時間で得た成果だけで、個人として何か価値が増えたわけではないです。
自分を変えるというのは、そういう事ではないです。
AWSのオンデマンドインスタンスの様に使われて、要らなくなったらポイされないように。

楽をする為の努力は大変です。大変だから、ただ単に長く働くという楽な選択肢に逃げています。
でも長く働いて辛い思いをしているので、自分が逃げていることに気づいていないのではないですか?
自分が頑張っていると思い込んでいるそのやりかたが、じつは楽だから逃げているだけじゃないかどうか
考えましょう。

「時代の変化を感じ取り、自分と会社を変える」というのは、こういうことだと思います。

明日は@kazuhisa1976 さんです。楽しみですね。

2012年11月20日火曜日

ドラクエの魔法、一つだけ使えるようになるとしたら?


大学生の頃にタイトルの話題で一時期盛り上がったか事があります。
一番人気はルーラです。 ドラえもんの道具で何が欲しいかという質問にもどこでもドアは人気のようです。
しかしこれは一見便利そうですが、それほど役に立つとは思えません。電車やクルマや飛行機やお金があれば何とかなりそうです。
せっかく一つだけ魔法が使えるようになるというのに目先の利益に目がくらんで、頑張ればどうにかなることを選んでしまうのはもったいない。
間違いなくこの魔法を選んだ人は金持ちににはなれません。横並び意識強すぎます。
次に多かったのは回復魔法系。ホイミとかキアリーとか。
ベホマレベルになれば、普通では回復しないような怪我でも治るだろうし、キアリーも普通ではどうにもならない状況を回避できそうです。
ただホイミ系の魔法を使える人は会社には言わない方がいいと思います。何故かは皆さんならきっと分かっているでしょう。

あと、レムオルとかアバカムとかお前いったい何するつもりだってやつが一人二人いました。

私のオススメは攻撃魔法です。
人生で通常では起こり得ない大ピンチに陥ったとき、そういう時に役だってこそ魔法を覚えた価値があるというものです。
例えば何か悪の組織的なアレに小さくなる薬飲まされそうとかそういうアレです。
ルーラで逃げるってのも有効な気がしますが弱点が多い。外でしか使えない。大体アレ、本当に無事に着地出来るのか?
それに逃げても問題の解決にはなりません。やっぱり倒さないと。
ということでメラゾーマかイオナズンあたりがオススメです。
動物は火を怖がる習性があるのでメラゾーマの方が効果が高いかもしれません。

というあたりを想定して、メラゾーマを選択したのですが
友達に「お前は一体何をするつもりだ?」と言われました。
レムオル選択したお前には言われたくねーよ。

2012年10月30日火曜日

ぼくのかんがえたさいきょうのはたらきかた

マジで書いてます。

■働く時間

日本の会社は1日8時間が標準の労働時間のところが多いと思います。 でもそんなに集中して働けないです。長くても4時間です。 それ以上は全然集中出来ません。調子が悪い時は4時間でも無理です。 でも、好きな事をやってると集中出来たりするので、残りの4時間は何か面白いことをやりたいです。

 Haskellの勉強とか、Scalaの勉強とか、F#の勉強とか(個人の感想です)

会社に8時間居なきゃいけないのがどうしようもないというのなら、4時間労働、4時間は勉強(というか何かしらの時間投資) に充てて、そのサイクルで得た技術なり知識なりで他人の二倍以上の速度で仕事が出来るようにしたいものです。 今はそんな理想には程遠いのですが、意地でも定時で帰るということを心がけています。

■会議

 参加者をうんざりさせる会議を開いてしまう人は、みんな同じような思い違いをしていると感じます。

・皆の意見を集めればよりいい意見が出来上がる
・皆で集まれば意思決定出来る

 これらは、まだ前向きで、中には

・皆で決めたことにして、決定したという責任を負いたくない
・会議すると仕事した感じで充実する

 みたいな酷いのも居ます。 何か決定したければ人数は少ないほうが良いし、皆の意見を集めたいだけなら メールか何かでアンケート取ればいい。返事を出さないような奴は会議でも喋らない。 皆で集まって同意をとった形にしたければ事前にネマワシしておけばいいし、 何かを決めてしまいたければ自分の責任で決めればいい。駄目だったら謝っとけばいいんだよあんなもん。

■コミュニケーション大事 

上の会議にも通じるものがあるんだけど、コミュニケーションはとればいいてもんじゃない。
仕事がうまく回ってるなら、むしろ取らなくていい。うまく回ってる仕事を止めてまで何を語り合うのか。
本当に必要なときにだけ、必要なコミュニケーションが取れるようにして、ようやく何が大切かが分かる。

問題の本質がどこにあるのか探らずに、もっと酷い時は問題なんて何も無いときにまで、やたらとコミュニケーション、コミュニケーション言っても仕方がない。
ちゃんと仕事が出来るやつは、相手のことが嫌いだろうが話しにくかろうが交流を図るし、不要ならわざわざ無駄に時間を使ったりしない。

※必要なコミュニケーションまで阻害するような環境になるというのも良くないです。上記は無意味にとりすぎようとするなという話です。

■管理・教育

これについては何がいいのか、どんなふうになれば幸せなのか、自分の中でもよくわからないです。
本音を言えば、こんなこと考えずとも何も問題ないようなメンバーとだけ仕事をしたい。今はそれ以上のことは考えられない。

2012年10月12日金曜日

rvmの挙動が変わったっぽいのでメモ

※2012/10/12現在の話
つい最近までは、

 $ rvm install 1.9.2

とやれば、libyamlは勝手にインストールしてくれたんだけど、今日やってみると入れてくれなかった。 なので今度から下記のように明示的に指定して入れる。

 $ rvm pkg install libyaml
 $ rvm install 1.9.2 -C --with-libyaml-dir=$HOME/.rvm/usr

以上。

※2012/10/30 追記
10/27の時点で最新のrvmで、1.9.3-p286を入れたときはyamlのインストールから勝手にやってくれました。
上記の時期だけ出てたバグを踏んだだけかもしれないです。
(rvm触ってるとこういうこと多いね)