僕は発展途上技術者

Vagrant 入門 - Mac 上に仮想マシンを簡単に用意する

» Vagrant 入門 - Windows 上に Linux の仮想マシンを簡単に用意する - 僕は発展途上技術者

に続いて、今度はメインマシンの Mac に Vagrant をインストールしてみました。

こちらは Windows 上と比べて、さらに格段に簡単でした。

以下手順を紹介します。

Virtual Box のインストール



Vagrant は仮想マシンをコマンドで簡単に用意できるツールですが、実際に仮想マシンを作るのは Virtual Box というソフトウェアです。

Virtual Box の Downloads ページより Mac 版をダウンロードしてインストールします。



インストールはすべてデフォルト設定でOKです。

Vagrant のインストール



次に Vagrant をインストールします。

Vagrant Downloads のページより最新(2013/3/15時点)の 1.1.0 を選び、Mac 版である Vagrant.dmg をダウンロードして、インストールします。



これも特に気にすることなく、デフォルト設定でインストールします。

Vagrant は 1.0.x までは gem でインストールできたのですが、1.1.0 よりこの .dmg ファイルでのインストールとなっています。1.0.x 以前の Vagrant を gem で入れている場合は、新しいバージョンをインストールする前に削除しておくことが推奨されています。

仮想マシンを起動



ターミナルより


vagrant -v


と入力してVagrant がちゃんとインストールされているかを確認してみましょう。バージョン番号が表示されれば OK です。

起動する仮想マシンのイメージをダウンロードして Vagrant に登録します。仮想マシンのイメージは .box という拡張子がついたファイルで、例えば http://www.vagrantbox.es/ には、いろいろな種類の OS のイメージファイルが用意されています。

このうち、今回は Ubuntu lucid 32 を起動してみます。


vagrant box add lucid32 http://files.vagrantup.com/lucid32.box


と入力します。http://files.vagrantup.com/lucid32.box という .box ファイルを lucid32 という名前で登録する、という意味です。

ファイルは数百メガバイトのサイズなので、ダウンロードに少し時間がかかります。

次に、


vagrant init lucid32


を実行して lucid32 を初期化します。初期化すると Vagrantfile というファイルが作成され、各種設定が書き込まれています。この Vagrantfile があるフォルダ上で実行しないと以降のコマンドは効きません。

いよいよ仮想マシンの起動です。


vagrant up


仮想マシンが起動したら、


vagrant ssh


でログインします。

どうでしょう?あっという間に仮想マシンを起動してログインするところまでできたのではないでしょうか。

Vagrant の他のコマンドについては

» Vagrantで簡単仮想マシン構築 \| Ryuzee.com

が参考になります。

起動した仮想マシンを止めるコマンドは、


vagrant halt


です。

Vagrant 入門 - Windows 上に Linux の仮想マシンを簡単に用意する

naoya さんによれば、「便利すぎて鼻血が出ました」という Vagrant を触ってみて、僕も Git を最初に触った以来の衝撃を受けました。

» Vagrant - naoyaのはてなダイアリー

開発者、それも gem で入れることから、Ruby を使う開発者の一部で話題になっているようなのですが、Vagrant はこれからプログラミングしようと思っている初心者や、開発環境を用意する必要があるデザイナーにこそ、強力なツールなんじゃないかと思っています。

Vagrant が便利に思えるひとつのケースとして、Windows の上に Linux の仮想マシンを用意する、というのが挙げられます。Web 業界にいると勘違いしてしまいそうになるのですが、世の中のほとんどの人は開発者も含めて Windows を使っているでしょう。そういう人が PHP や Ruby などを始めてみたいと思った時に、難関となるのが環境構築です。Mac や Linux 上に構築するのに比べて、Windows 上でそういったサーバー系の言語を使おうと思った時の環境構築は面倒です。

Vagrant を使えば、簡単に仮想マシンを Windows の上に用意できます。仮想マシンというのは文字通り、仮想なマシン、もう一台マシンが手に入るようなものです。

仮想マシンを作ることができるソフトウェアには、他にも VMWare など以前からありましたが、Vagrant が使う Virtual Box は無料である、という点が大きい。そして仮想マシンの大きな特徴として、マシン1台全体が一つのファイルなので、そのファイルをやりとりすることで、環境まるごと一つを他の人に渡したりできるという点が挙げられます。

今回 Linux の仮想マシンを用意するのですが、その仮想マシンに PHP や Ruby を用意するほうが Windows にそれらを用意するよりも楽ですし、もっと言えば、PHP や Ruby が最初から使える状態になったマシンを用意することもできるのです。

前置きが長くなってしまいました。Windows 上に Vagrant をインストールして Linux の仮想マシンを一つ用意するところまでの手順を紹介します。

普段は Mac を使っているのですが、家にあるおんぼろ PC の Windows XP にインストールしてみました。

Virtual Box のインストール



Vagrant は仮想マシンをコマンドで簡単に用意できるツールですが、実際に仮想マシンを作るのは Virtual Box というソフトウェアです。

Virtual Box の Downloads ページより Windows 版をダウンロードしてインストールします。



インストールの際はデフォルトの設定で、「次へ」を押し続けました。

Vagrant のインストール



次に Vagrant をインストールします。

Vagrant Downloads のページより最新(2013/3/15時点)の 1.1.0 を選び、Windows 版である Vagrant.msi をダウンロードして、インストールします。



これも特に気にすることなく、デフォルト設定でインストールします。

GitHub for Windows のインストール



あとで Vagrant で仮想マシンを用意したあと、そのマシンにログインするために ssh というツールを使うことになるのですが、Windows にはこの ssh が始めから用意されていません。Windows 上の ssh はいくつかあるのですが、どうせ後々使うことになって便利だと思うので GitHub for Windows をインストールします。GitHub for Windows は GitHub を Windows から使えるようにするアプリケーションですが、ssh も含まれているのです。

GitHub for Windows のページよりダウンロード、インストールします。



環境変数の設定



つまづくとしたらたぶんここのステップだと思います。と言っても注意深くタイプすれば大丈夫です。

[スタート] > [コントロールパネル] > [システム] > [詳細設定] > [環境変数]

を選び、下側のシステム環境変数の中から変数名が Path となっているところをダブルクリック、値の最後が c:¥vagrant¥vagrant¥bin となっていることを確認した上で、そのあとに


;$VBOX_INSTALL_PATH


を追加します。



このキャプチャの通りになっていたら OK です。

仮想マシンを起動



いよいよ最後のステップです。

最後は次々 Vagrant のコマンドを入力していって、仮想マシンを起動します。

コマンドの入力は Windows のコマンドプロンプトを使うのではなく、さきほど GitHub for Windows をインストールしたときに一緒に用意された Git Shell を使います。



デスクトップ上にある Git Shell をダブルクリックして起動します。

Vagrant がちゃんとインストールされているかを確認してみましょう。


vagrant -v


と入力してバージョン番号が表示されていれば OK です。




次に起動する仮想マシンのイメージをダウンロードして Vagrant に登録します。仮想マシンのイメージは .box という拡張子がついたファイルで、例えば http://www.vagrantbox.es/ には、いろいろな種類の OS のイメージファイルが用意されています。

このうち、今回は Ubuntu lucid 32 を起動してみます。


vagrant box add lucid32 http://files.vagrantup.com/lucid32.box


と入力します。http://files.vagrantup.com/lucid32.box という .box ファイルを lucid32 という名前で登録する、という意味です。

ファイルは数百メガバイトのサイズなので、ダウンロードに少し時間がかかります。

次に、


vagrant init lucid32


を実行して lucid32 を初期化します。初期化すると Vagrantfile というファイルが作成され、各種設定が書き込まれています。この Vagrantfile があるフォルダ上で実行しないと以降のコマンドは効きません。

いよいよ仮想マシンの起動です。


vagrant up


を実行します。このとき、以下のような警告がでたら、「ブロックを解除する」を選びます。



仮想マシンが起動したら、


vagrant ssh


でログインします。

以下、無事ログインできたところです。

Welcome to Ubuntu! と表示されています。



どうでしょうか?

.box ファイルをダウンロードするところは少し時間がかかるかもしれませんが、全体では比較的少ない手順なので、楽に Linux 環境まるごと一つ用意できるのではないでしょうか。

Vagrant の他のコマンドについては

» Vagrantで簡単仮想マシン構築 \| Ryuzee.com

が参考になります。

起動した仮想マシンを止めるコマンドは、


vagrant halt


です。

Vagrant は他にもいろいろな使い道がありそうです。これから機会があれば順次紹介していきたいと思います。

iOSなどのスマートフォンのブラウザ側でリサイズをおこないファイルアップロードを爆速にする

iOS 6 より Safari からファイルをアップロードできるようになり、写真投稿が必要なウェブサービスで、投稿のためだけにアプリを用意する必要はなくなったかなあ、と最初は思っていました。

ところが、iPhone 5 などで撮った写真などはファイルサイズが結構大きく、Safari からアップロードするときはそのままのサイズで送るため、外出先で 3G だとアップロードにものすごく時間がかかってしまい、ほとんど使い物になりません。

そこで、アップロード前にブラウザ側で写真をリサイズできる方法はないかと探したところ、

» IOS6 and Safari Photo Uploading - File API + Canvas + jQuery Ajax Uploading and Resizing Files Asynchronously - Stack Overflow

で紹介されていた

» Javascript canvasResize Plugin

というプラグインが使えそうだったので、paperclip と一緒に組み込んだ Rails のサンプルアプリを作ってみました。

» champierre/canvas_resize_sample · GitHub

canvasResize Plugin でファイルをリサイズした結果を DataURI にした上で、それを hidden で送信するようにしています。

既存のプロジェクトに導入する場合の手順は README に記したので、上記 GitHub のリンク先を参照してください。

いま作っているウェブサービスにさっそく導入してみて、iPhone 5 で撮った写真のアップロードに要する時間を計測してみたところ、3G回線で通常は1分近くかかっていたのが、300px x 300px 以内にリサイズした上でアップロードしたところ、10秒弱と爆速になりました。

扱えるのが jpg のみ(写真だけの場合は問題ないはずですが。。)だったり、極端に小さいサイズのファイルではエラーになったりというサンプルですが、よかったら参考にしてみてください。

また、実装方法などでもっといい方法があったら、コメントなどで教えていただけるとありがたいです。


「読み、書き、プログラミング」は誰が学ぶべきか?

「読み、書き、プログラミング」は、OtOMOCoderDojoなどでプログラミングをこどもに教える活動をしている人たちの間で繰り返し使われているスローガンです。

しかし、メディアでの取り上げられかたや第三者から見た場合、「読み、書き、プログラミング」を、こどものうちから学んで将来はプログラマーを目指そう!みたいな文脈で誤解されがちで、僕も自分がソフトウェアを開発している職業柄から、油断すると知らずにそうした考えに陥ってしまうことがあります。

「スクラッチ」(OtOMO や CoderDojo でも教えている教育用プログラミング言語)を開発したミッチェル・レズニック氏は、「読み、書き、プログラミング」をそのまま英語にした「Reading, Writing, and Programming」と題しておこなったスピーチで、そうではない、と言っています。

一部のプログラマーの素養がありそうなこどもたちにだけに必須のスキルなわけではなく、よりインタラクティブな方法で自分を表現したり、より創造性を発揮したり、あるいは他の人と協調して何かを成し遂げたいすべての人のためのスキルなんだということがわかります。



» Reading, Writing, and Programming Mitch Resnick \| TEDxBeaconStreet 2012

氏の83歳の母親が、レズニック氏の誕生日を祝うためにスクラッチで動くバースデーカードを作った、というエピソードがとても印象的。彼女がプログラマーやコンピューターサイエンティストを目指しているわけはないのは明らかで、ただ息子に喜んでもらおうと、楽しんで新しいことを学び、そしてインタラクティブに表現するためにプログラミングしている。

誰もがプロのライターを目指すために「読み・書き」を学ぶのでないのと同様に、プログラマーを目指すために「プログラミング」を学ぶわけではないのです。

また、プログラミングをおこなうことで、プログラミング以外の様々なことをこどもが自発的に学んでいく様子を、スクラッチでゲーム作りに挑戦するこどものエピソードで紹介している。あるゲームに得点をつけたいけれどやり方がわからなかったこどもに変数の概念を教えたところ、「Thank you, thank you, thank you!!」ととても感謝されたという話だ。変数を教えることで生徒から感謝されるなんてことは、普通の授業ではありえない。なぜなら、授業で変数を教わるとき、こども達はいったいなんで変数を教わる必要があるのかわからないからです。

これは実際、スクラッチをこどもたちに教えたことがある人なら誰でも体験できます。ゲームづくりの基本といえるキャラクターを画面内で自由に動かすときに、半周は180度、一周させるには360度回転させるという角度の概念や、横方向はx座標を指定し、縦方向はy座標で指定するという座標軸の概念やプラス/マイナスの概念なんかも、小学校低学年のこどもでさえもすすんで学ぼうとする。学校で習った、習っていないというのは関係なくて、彼らはただただ面白いゲームを作ろうとしているだけなのだ。

「あなたもプログラミングを始めてみませんか?」という言葉でレズニック氏はスピーチを締めくくっています。

身近にこどもがいたら一緒に始めてみるのがいいかもしれません。

» OtOMO – オトモ

では毎月スクラッチのワークショップをおこなっています。

またこどもたちに教えながら、自分も学ぶという手もあります。

» CoderDojo Tokyo

は、ボランティアで小中学生にプログラミングを教えることができるメンターを探しています。

そして、独学で学び始めようという学生や大人には

» 3分動画でマスターする初心者向けプログラミング学習サイト - ドットインストール

をいつもすすめています。

こどもが継続的にそして意欲的にプログラミングを続ける秘訣

CoderDojo TokyoOtOMO – オトモ を通して、こどもにプログラミングを教えてきましたが、継続的にそして意欲的にプログラミングを続けるこどもとそうでないこどもがいます。

僕にとってはその違いはあまりに明白で、もちろん例外もありますがだいたいのケースで「親が一緒にやっているかどうか」です。

プログラミングと似ている面があるのが英語で、自分は必要とはしてこなかったけれど将来こどもには必要になりそうだから、ということで、こどもを英会話教室に小さい頃から通わせていたりする、ということをよく聞きます。ですが、それって本当に長続きし、そして身についているのでしょうか?

おなじ習い事で、野球とかサッカーを考えてみましょう。だいたいこの場合は父親だと思いますが、親がキャッチボールやパスの練習につきあってあげない環境でこどもがうまくなるとはとても考えられません。

プログラミングや英語も同じなのに、スキル自体の特殊性があって、親が習得というか理解することをあきらめてしまっていることが多いのだと思います。でも、こどもは親を抜こうとして頑張るのであって、その親があまりに簡単に抜かれてしまってはこどもは頑張らないと思うのです。

「そりゃあ、あなたは仕事としてプログラミングをやっているのだからそういうことが簡単に言える」と言われてしまうと、まあ僕も正直プログラミングをまったくやったことがない人の気持ちというのはわからないので返答には困ります。ですが、こども達に一番最初に教える「スクラッチ」は、小学校低学年のこどもでもプログラミングできるのを大人が理解できないとは思えないのです。

始めからあきらめてしまうのではなく、一緒に学ぶのでもいいので、努力はすべきなのではないでしょうか。

もし、このエントリーを読んで、自分もこどもと一緒にプログラミングをやってみようと思っていただけたら、以下の動画でスクラッチとはどんなものなのか見てみて下さい。

» Scratchの基礎 (全22回) - ドットインストール

CoderDojo TokyoOtOMO – オトモ、あるいはほかの団体のワークショップなどで、プログラミングがどういうものかに触れることはとてもいいことだと思います。その上で、こどもが興味を持ったのなら、ぜひ親子で続けてもらいたいと思っています。

スクラッチに関しては、自分が作った作品を共有して公開するという、モチベーションを維持する仕組みがきちんと用意されているのでそれをぜひ利用してみてください。そして、スクラッチでは、「親が一緒にやっているかどうか」が一目瞭然で、続けているこどものアカウントの友達には、だいたいお父さんかお母さんのアカウントが登録されています。(つまりお父さん(お母さん)もやっているということ)

2013年の抱負 3つのやらないこと

さて、気が付けばあっという間に2013年が明けてしまい、はやくも一日目が終わろうとしています。

初日が終わらぬうちに今年の抱負を宣言しておこうと思います。

胸がすくズバッとした主張が好きで愛読している「Chikirinの日記」の

» 来年の抱負) やらないことを3つ決めよう! - Chikirinの日記

に書かれていた方法がとてもいい方法だと思いました。

一日は24時間と限られています。優先順位を決め、自分の時間を何に使うのかがとても大事で、そのためにはやらないことを決めるのがいいというのがその主旨です。

昨年僕は40歳を迎え、なんだか急に人生の残り時間が少なく感じられるようになって、正直少しあせりを感じて始めていたときに、上記エントリがとても心に響いたのです。

というわけで、僕も3つのやらないことを決めました。

やらないことその1: 0:00 以降仕事をしない



最近朝がとても弱くて、まともに起きることができません。午前中にやるべきことをやるのが効率がいいとはわかってはいるのですが。。

その原因は、まあ夜が遅いからなのですが、早起きしよう、という目標だと守れそうにないので、0:00 以降は PC に向かって仕事をしない、という目標にしておき、仕事しなければ、やることはあまりないので寝てしまいますから、それで早起きしようというねらいです。

やらないことその2: URL が入っていない新規ツイート、Facebook の近況アップデートをおこなわない



これまでさまざまな影響を受け、尊敬してやまない「百式」田口さんの、セルフブランディングには「ハッキリ言ってブログしかない」という主張を僕はいまでも強く信じています。

(詳しくは

» 人気ブログ『百式』を運営する田口元さんが語るセルフブランディングセミナーの内容全部まとめ

にまとめられています)

Twitter の 140 文字では短すぎるし、Facebook では会ったことがある友達や知人にまでしか自分の主張を伝えることはできません。

とはいえ、Twitter Facebook の便利さは否定できず、完全にやめることはできそうにありません。

そして、ツイートしてしまうと、自分の言いたかったことを言った気分になってしまい、数年前に比べるとブログを書く頻度が激減しています。

そこで、ツイートしたくなったら、グッとこらえてその内容をブログに書き、自分のエントリーの URL を載せたツイート、近況をおこなうようにする、というのがURL のない新規ツイート、Facebook の近況アップデートをしない、という趣旨です。

他人のツイートに反応してリツイートしたり、メンションするのは URL 付きとみなせて、これは続けていくつもりなので、良しとします。

いま作っているWebサービス以外の個人サービスに着手しない



ウェブサービスを作るのが好きで、これまでいくつも個人サービスを作って来ましたが、しばらくはいま開発中のものに専念します。

ちょうどこの「3つのやらないこと」ができたかどうかを Twitter アカウントさえあれば毎日記録できる 3Wont というサービスを年末に思いつき、着手してしまいそうになって、さっそく目標を破りそうになってしまったのですが、なんとか思いとどまりました。

以上、僕の3つのやらないことです。

とりあえず2013年、最初の一日は3つとも達成で終われそうです。

いまさらパズドラをやってみて、そして1時間でやめた

いまさらながら、iPhone アプリではやっているらしい「パスドラ」をやってみた。

» 私がパズドラで遊ばなくなった理由 - もとまか日記

で挙げられている遊ばなくなった理由がはっきりとしなかったので、自分で試して確かめてみたいというのが理由。

さすがに人気があるだけあって、僕が以前ちょっとやってみたソーシャルゲームにありがちな単にタップするだけの単調なバトルとは違って、パズルを組み合わせたバトルは若干のゲーム性があり、バトルのエフェクトだったり効果音などはきっちり作られていて操作していて気持ちがいい。

が、知らない人のモンスター(序盤だからか自分のモンスターよりも段違いに強い)を仲間で連れて行き、その仲間のモンスターにばかり攻撃させていれば、序盤のノーマルのステージではまったくこちらがやられることはない。なんか飽き始めてきたので、ちょっとスペシャルステージを覗いてみたところあえなくやられてゲームオーバー。

そこで、冒頭で紹介したエントリーにでてくる、魔法石(App Store で1個85円で買える)を使わないとコンティニューできませんよ、という画面がでてきて、納得。

「パズドラ」含め、ソーシャルゲーム全般に自分が感じる違和感は、それをクリアする(クリアするという概念があるのかわからないが。。)のにいったいいくらお金がかかるのかがわからない点だとあらためて確認した。

パズドラが普通のゲームとして人気があり、800円とか1200円でダウンロードできるゲームだったとしたら僕は買うかもしれない。なぜなら、800円とか1200円以上はもう払わなくて良いという安心感がある。

コンティニューで85円は序の口で、ゲームが進んでいくうちに、魔法石5個とか10個必要ですよ、といった仕掛けが用意されているかもしれない。今後果たしていくらかかるかというところが未知数なので、最初は無料だとしてもトータルでいったいいくらなんだという点が見えない。

こどもたちがソーシャルゲームをやりたい、ともし言い出したら、そのあたりをちゃんとわかりやすく説明して、クオリティも料金も確定している他のゲームをやらせることにする。

というわけで、僕も静かにホームボタンを押してパズドラを閉じ、ブルブル震わせて削除した。

#666666 といった hex 指定の色の明るさを求める方法

\#666666 といった hex 指定の色の明るさを求める方法を調べたのでメモしておきます。

Python で書くと以下の通り。



上記関数を使って、brightness("#666666") = 0.4 のように 0 〜 1 で表される明るさを求め、たとえば 0.5 より大きければ明るい色なので、その上に表示するテキストの色は黒、0.5 より小さければ暗い色なので、テキストの色は白、というように自動的に決めることができる。

参考:
colors - Hex Code Brightness PHP? - Stack Overflow

CANVASのプログラミングワークショップin東北で亘理小学校の6年生たちにスクラッチを教えてきました

NPO法人CANVASさんがおこなっている「プログラミングワークショップin東北」に講師として参加し、宮城県の亘理小学校の6年生たちにスクラッチを教えてきました。

普段こどもたちが参加していて、僕もお手伝いしている三軒茶屋で毎月スクラッチのワークショップをおこなっているOtOMOが協力している関係で、内容はいつもOtOMOで初めての子向けに教える時におこなう「ネコから逃げろ!」というゲームをつくるというものでした。

東北のこどもたちにプログラミングを教えるという取り組みの今回が2回目、前回の様子は

» 石巻や仙台などの小学生にプログラミング教室、NPO法人CANVASが開始:ITpro

で紹介されています。

東京からはCANVASのみなさまと亘理小OBのデラさん、現地からは亘理小に娘さんが通われていて自身はフリーでプログラマーをされている Praise First の砂金(イサゴと読むと初めて知りました)さんとその奥さま、こどもたち自身が取材し石巻のことを伝える
「石巻日日こども新聞」を発行しているキッズ・メディア・ステーションの太田さん、といったメンバーに助けられながらも、2日間で40人弱のクラスを3クラス教えるという、人前で話すのはどちらかというとあまり得意でない僕にはなかなかにハードな内容でした。

それでも、いつものように、こどもたちの「わかった!」という瞬間に立ち会えること、楽しんでいる笑顔が見られることで、慣れないことをする大変さは吹っ飛びます。

特に今回は、「iPhone とかのアプリを作っている人です」と紹介してもらうと、「おお」とか「すげー」と生徒さんたちがどよめいてくれたり、プログラマーになりたいという女の子を担任の先生に紹介してもらったりと、気恥ずかしいですがうれしいことの連続でした。

極めつけはワークショップすべてが終わったあとに、先生、生徒さんたちからのサプライズで、合唱のプレゼント。これにはホントやられました。

感謝のお手紙まで生徒さんたちからいただいて、「いやいやこちらの方が何倍も感謝です」という思いです。

亘理小のみなさんの素晴らしさが少しでも伝わるといいなと思い、手紙への返事をあえてブログで紹介します。

説教じみた部分もありますが、まあ一応40年生きてきたので、少しくらいえらそうなことを書かせて下さい。


亘理小のみなさんへ



2日間という限られた時間でしたが、プログラミングのワークショップでみなさんと一緒に楽しい時間を過ごしました。



感謝のお手紙を何枚かいただき読ませてもらいましたが、感謝するのはむしろこちらのほうです。



最後のサプライズで、とても美しい声で僕たちのために歌ってくれた「COSMOS」。初めて聞いた曲でしたが、これからこの曲を聞くたびにみなさんのことを思い出すでしょう。とても感動しました。どうもありがとう。



僕はプログラミングは人よりは得意ですが、人前で話すのは正直あまり得意ではありません。じゃあ、なんでワークショップで先生みたいなことをするのかと言ったら、プログラミングができると人を楽しませたり生活をいろいろと便利にするものを創ることができる上にとても楽しいんだよ、ということをみんなに少しでも伝えることができたらいいなと思うからです。



ワークショップを通じてプログラミングの楽しさを少しでも知ってもらえたらうれしいし、そうでなくて、自分にはこれはちょっと向いてないな、と思ってもらってもそれはそれでいいと思っています。



お礼代わりになるかわからないけれど、みなさんがなりたい職業にどうしたらつけるかという話を書いてみます。



ワークショップのとき、プログラマーになりたいという女の子を紹介してもらいました。自分がやっている職業になりたいと言ってもらえてとてもうれしく思いました。そういう風に言える彼女は僕にはとてもうらやましいです。



自分がやりたいこと、好きなことがわかっているというのは素晴らしいことですが、今はまだわからない、という子でもあせることは全然ありません。僕なんて、自分がプログラミングが好きなんだなとわかってプログラマーになったのは、実はまだ7年前です。



いろんなことを体験したり、見聞きしていく中で、これは好きで休み時間も忘れるくらい集中できるな、というものを見つけてください。今度は別のワークショップに参加したり、あるいは本やインターネットで調べてみたり、あるいはどこかに出かけたり、いろいろな仕事をしている大人の話を聞いたりするといいでしょう。



そうやって好きなものをみつけることができたら、こんどはその好きなもののエキスパートで自分がなりたいなと思える人をみつけてみてください。



たとえば野球選手になりたいという人がいたら、メジャーリーグで活躍するイチロー選手みたいになりたいなと思うのです。そういう人のことをロールモデルと言います。それで、イチロー選手の考え方とか、練習方法とかをまずは真似してみたりします。イチロー選手の言葉とかどういうことを考えているかについては、本ででていたり、ネットで調べてみればいろいろと出てきます。



あるいは自分より野球が少しうまい友達をロールモデルにしてもいいでしょう。その友達みたいになるにはどうすればいいかを考え、友達よりも足りていないところを一生懸命練習したりして、追いつこうとしてみてください。



イチローにはなれないかもしれないし、友達のほうでも練習するだろうからなかなか追いつけないかもしれないけれど、そうやって努力し続けていれば、いつの間にか、昨日の自分より、あるいは一ヶ月前の自分、一年前の自分よりもずっとうまくなっているはずです。



そうやって続けていって、その職業になるのに必要なレベルに達したとき、なりたかった職業につけるのです。ピアニストになりたい、学校の先生になりたい、お寿司職人になりたい、プログラマーになりたいなど他の職業でも同じことです。



このアドバイスが役に立って、みなさんがなりたい職業になれる助けに少しでもなったらうれしいです。


Ruby on Rails をこれから始める人へのおすすめ本やおすすめ情報

Ruby on Rails をこれから始める人向けの情報



Ruby on Rails をこれから始めたいのですが、どんな本がおすすめですか?と聞かれたので、ちょっとまとめておきたいと思います。

» 僕が Ruby on Rails を絶賛する理由 - 僕は発展途上技術者

というエントリーを2007年に書きましたが、その後状況はいろいろと変わり、僕自身 iOS アプリや Android アプリを開発するようになったり、Web サービスでも Python on GAE を触るようになったりして、当時ほど Ruby on Rails 一色というわけではなくなりました。

また、Ruby on Rails の環境を自分の開発マシンに用意するのも

» Mac OS X 10.8 Mountain Lion に Ruby on Rails 環境をセットアップする - 僕は発展途上技術者

で書いたように、最近はちょっと面倒になりました。

それでも Web サービスをつくる、それもユーザー向けで毎日サービスを運用しながら、少しずつ改善していき手を入れ続けるような性質の Web サービスならば、いまでも Ruby on Rails を絶賛おすすめ中です。

さて、その Rails を学ぶためのおすすめ本ですが、2007年から変わらず

RailsによるアジャイルWebアプリケーション開発 第4版
Sam Ruby Dave Thomas David Heinemeier Hansson
オーム社
売り上げランキング: 13207


がおすすめです。

僕の手元にあるのは第2版までの日本語版と第3版の英語版で、上記第4版は正直言うと中身をみていないのですが、変わらず良書であることは間違いないでしょう。

Rails のみならず、デプロイ方法やテストの書き方など Web サービスを作る上でのベストプラクティスを学ぶことができるので、2007年にこの本を最初に手をとるまでPHPで断片的な知識でもって Web サービスを開発していた僕にとっては、それらが一気に整理されて大変ためになったことを覚えています。

Rails 以前に Ruby の基本的な知識が必要という場合(Ruby on Rails を始めたいという方はたいがいそうだと思いますが)は、

たのしいRuby 第3版
たのしいRuby 第3版
posted with amazlet at 12.12.07
高橋 征義 後藤 裕蔵
ソフトバンククリエイティブ
売り上げランキング: 8348


を Rails 本を読む前に読んでおいたほうがいいでしょう。 Ruby を使う人達が言っている「Ruby がたのしい」という言葉の所以がわかると思います。

順番としては「たのしいRuby」を読んでから「RailsによるアジャイルWebアプリケーション開発 第4版」を読むのがおすすめですが、この2つを読み通すにはそれなりの時間がかかるでしょう。

もっと手っ取り早く学びたい、あるいは先にざっと概要を知っておきたいという場合は、今は動画で学ぶという方法があります。

» Rubyの基礎 (全32回) - ドットインストール

» Ruby on Railsの基礎 (全46回) - ドットインストール

ドットインストールは動画でプログラミングを学習できるサイトで、すべての動画を無料で観ることができる素晴らしいサイトです。ひとつの動画が3分弱なので、上記2つをぶっ通しで観れば、4時間くらいで概要をつかむことができます。その上で書籍を読めば効率的に学ぶことができるのではないでしょうか。

Ruby on Rails でとりあえずアプリが作れるようになった人向けの情報



さて、ここまでの基本情報を身に着け、ちょっとした Web アプリを作れるようになって初学者を卒業した段階で必要そうな情報も紹介しておきます。

この段階になると、具体的にやりたいことが出てきて「こういうことがしたいんだけれどどう書けばいいんだ?」といった疑問が多く出てくるようになると思います。そういうときに役立つのが以下のレシピブックです。

Rails3レシピブック 190の技
高橋 征義 松田 明 諸橋 恭介
ソフトバンククリエイティブ
売り上げランキング: 46777


Rubyレシピブック 第3版 303の技
青木 峰郎 後藤 裕蔵 高橋 征義
ソフトバンククリエイティブ
売り上げランキング: 147156


英語ですが、知っておくと便利な Tips を動画で紹介している

Ruby on Rails Screencasts - RailsCasts

もおすすめです。

Ruby と Rails をやってて強力だなあと思うのは便利で豊富な gem と呼ばれるライブラリの存在なのですが、たくさんあり過ぎてどれを選んでいいか迷うときがあります。そういうときに上記 RailsCasts で紹介されているものを使うというひとつの判断基準になります。

どの gem を使うかの判断基準として

The Ruby Toolbox - Know Your Options!

を使うのもいいでしょう。Ruby Toolbox では各 gem のメンテされ具合や利用者数、評判などを比較することができます。

Rails の API ドキュメントを調べたいという場合は、インクリメンタルサーチができる

Ruby on Rails - APIdock

がおすすめです。

Ruby のコーディングスタイルが気になってきたら、

Rubyアソシエーション: コーディング規約

で紹介されている各コーディング規約を参考にするといいと思います。

いままで他の言語、フレームワークをやってきた人向けへのアドバイス



いままで他の言語、フレームワークをやってきて、Ruby on Rails で実際にアプリを開発し始めたときによく見る悪いパターンというのを紹介したいと思います。

Ruby on Rails では DB のスキーマ情報の変更を Migration という仕組みで綺麗に管理しているのですが、それを無視して sql ファイルで管理しようとするのはやめたほうがいいです。初期データ投入も、seed.rb に Ruby でわかりやすく書くというスタンダードな方法を取り、sql ファイルをインポートという方法は避けたほうがいい。

メソッド名や変数名の付け方を Ruby や Rails 流にあわせましょう。Rails ではモデル名を名詞の単数形で定義すると、自動的にその名詞の複数形で DB 内の対応するテーブルの名前がつけられるなど、英語のルールに従うことが必要なので、メソッド名や変数名を英語でつけるというのが特に必要です。その際の名前付けも、なるべく正確に、そしてスペルミスをしないように辞書で確認するなど気をつけたほうがいいです。

人が作ったものは信用できないということで、すでに Rails の機能にあるのに、あるいは同じ機能の gem があるのに、同等の機能を実現するライブラリを自作してしまう人がいるのですが、複数人が関わるプロジェクトではそれはできるだけやめたほうがいいでしょう。もし自作のライブラリを採用したいとしたら、github などで公開し、すでに世にでていて多くのユーザーを獲得している先行のライブラリと同等のドキュメントをそろえ、前述したThe Ruby Toolboxで見て、既存のライブラリよりも多くのユーザーを獲得していると証明できるくらいでないと、と思います。

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Scratchで楽しく学ぶ アート&サイエンスRaspberry Piではじめる どきどきプログラミングを書きました。

オンラインコンテンツ: 大人のためのScratch

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ