Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

タグ:Ruby


「Web技術オーバービュー」と「Webアプリケーション実践入門/PHP編」の感想はこちらの記事に書いています。

「Webアプリケーション実践入門/Ruby編」は、RubyによるWebアプリケーションの構築方法を解説しています。Webアプリケーションフレームワークには、定番のRuby On Railsではなく、マイクロフレームワークのSinatraを使用しています。

PHP編とRuby編のいずれも、マイクロフレームワークを使用して簡単なCRUDのWebアプリケーションを作る実習になっています。この2編を両方やると、PHPとRubyそれぞれの感触がつかめると思います。

両方をやって感じたPHPとRubyの比較は以下のような感じです。

PHPの良いところ
*  環境構築が簡単。ピュアPHPなライブラリが多く、ネイティブ拡張も大抵はOSのパッケージマネージャーからインストールできる。

PHPの悪いところ
* レガシーな環境が残りがち(PHPそれ自体というよりは、外部要因)。

Rubyの良いところ
* エレガントな文法。かゆいところに手が届くクラス。
* ActiveRecordが非常に良い。

Rubyの悪いところ
* gemライブラリは依存関係が激しく、ビルドも失敗しやすい。動かすまでの環境構築が大変。

また、文法については、Rubyは結構自由度が高いのに対して、PHPはあまり融通が効きません。この点、PHPは初心者にやさしく、Rubyは上級者ほどたのしく書ける言語といえるでしょう。


「サーバ環境の作り方」「サービス運用の基礎知識」については、あっさりめですが、Webアプリ制作の初心者が見落としがちな部分でもあるので、結構ためになります。


『Webアプリケーションエンジニア養成読本』全体としては、良い本だと思います。さらに学びを深めるための推薦書籍/WebサイトのリストがあるのもGood。第2章の「Webアプリケーション実践入門」ではレイアウトが見づらく実習を進めるにはストレスが溜まる、という難点がありますが、対象読者に当てはまる人なら、買って損はしません。

『Webアプリエンジニア養成読本』のRuby編をやっていたら、Activerecordのインストールでこけました。

環境は、OS X 10.9.2/Xcode5.1。

どうやら、atomicというRuby拡張のビルドに失敗している模様。

色々と原因を探ってみたところ、gcc(clang)のバージョンが原因でした。なお、私の環境のgccのバージョンは以下の通り。
$ which gcc
/usr/bin/gcc
$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix

OS Xユーザーが使用しているgccは、XCodeのコマンドラインツールとしてインストールしたgccであることが多いと思います。このgcc、コマンドはgccなのですが、gcc -vしてみれば分かるように、実態はclangなのです。

(そもそもgccって何? って人のために説明すると、gccは GNU Compiler Collectionの略で、C言語等の各種言語に対応したコンパイラ(プログラミング言語で書いたソースコードをコンピュータが実行可能なバイナリコードに変換する翻訳機)のこと。clangは、これまたC言語等のコンパイラなのだけど、割と最近出てきたコンパイラで、gccのライバル)

そして、XCode5.1に付属するclangでは、未知のビルドオプションを指定した場合にエラーを吐くようになりました。エラーなので、発生した時点でビルドが強制終了されます。

Xcode 5.1 Release Notes

The Apple LLVM compiler in Xcode 5.1 treats unrecognized command-line options as errors. This issue has been seen when building both Python native extensions and Ruby Gems, where some invalid compiler options are currently specified.

Projects using invalid compiler options will need to be changed to remove those options. To help ease that transition, the compiler will temporarily accept an option to downgrade the error to a warning:

-Wno-error=unused-command-line-argument-hard-error-in-future

このエラーを抑止する方法は、上記引用文に紹介されている「-Wno-error=unused-command-line-argument-hard-error-in-future」オプションをつけてビルドすることです。

このオプションを使用しつつ、ビルドを実行するには、以下のように環境変数をセットしつつbundle installすればOKです。
$ sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle install

2013-04-06 追記

Nokogiriのインストールの際にも、mini_portileというネイティブ拡張のビルドでこけました。上記と同様、ビルドオプション付きのbundle installしたらOK。OS X 10.9でRubyのネイティブ拡張ビルドに失敗したら、まずは上記オプション付きのビルドを試すのが良さそう。

あけましておめでとうございます。2012年に読んだ技術書のまとめ兼、2013年の抱負です。


☆HTML/CSS

HTML/XHTML&スタイルシートレッスンブック―ステップバイステップ形式でマスターできる
HTML/XHTML&スタイルシートレッスンブック

2月に読了。XHTML1.0を使用したマークアップの入門書。CSS2も同時に習得できます。最初からHTML5を学べる入門書も出てきていますが、XHTML1.0のマークアップはHTML5を書く上で基礎となるものです。本書が、HTMLマークアップの優れた入門書である点は現在でも変わりありません。オススメ。


HTML5+CSS3で作る  魅せるiPhoneサイト  iPhone/iPad/iPod touch対応
HTML5+CSS3で作る 魅せるiPhoneサイト

3月に読了。iOSデバイスに対応したサイト構築方法が学べます。「iPhoneサイト」であって「スマホサイト」ではないので、Android対応に関しては一切触れてません。


2013年は、HTMLに関しては「これをやりたい」ってあんまり無いんですよねえ。CSSに関しては、SCSS/LESSあたりには興味があります(やるとは言ってないw)。


☆JavaScript/jQuery

マンガでわかるJavaScript
マンガでわかるJavaScript

3月に読了。11月に再読。3月時点では分からないところは飛ばして読みました。11月時点では、JavaScriptのオブジェクト指向の理解が進みました。漫画はゆるくて面白いものの、サンプルコードが退屈なのが弱点。Webサイトマンガで分かるJavaScriptプログラミング講座の書籍版です。


Web制作の現場で使う jQueryデザイン入門 (WEB PROFESSIONAL)
Web制作の現場で使う jQueryデザイン入門

4月に読了。実践的なサンプルコードが充実しているうえ、商用利用可! 職場に1冊jQuery本を置いとくならコレ。基礎編は入門に適した内容になっているものの、実践編はプログラミング初心者にはツラい(正規表現が登場したりする)。jQuery学習書としてはWebデザイナーのための jQuery入門の方がオススメ。


jQuery ポケットリファレンス (POCKET REFERENCE)
jQuery ポケットリファレンス

調べ物用。jQuery1.4対応。公式リファレンスを見ても分からない、って時に、本書を読んだら解決したりする。


Head First JavaScript ―頭とからだで覚えるJavaScriptの基本
Head First JavaScript ―頭とからだで覚えるJavaScriptの基本

11月に読了。本の構成が初心者に優しくないうえ、邦訳が雑。非推奨。


JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技
JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技

若手IT勉強会のため購入。マニアックなネタが多いので、中級者以上向け。


他に、JavaScript本格入門も買いましたが、未読。JavaScriptはしっかりやりたいなと思いつつも、いまいちやれてない。仕事で全然使ってないのが一因ですね。今年、どの程度やるかも、仕事次第。


☆PHP

PHP公式資格教科書 PHP5技術者認定初級試験対応 (EXPERT EXPASS)
PHP公式資格教科書 PHP5技術者認定初級試験対応

半分ほど読んで積ん読。環境構築は載ってないので、初心者向けではありません。非常に易しい内容と、妙にマニアックな内容(ビット演算とか)が混在しています。資格に関しては、受験料1万2千円と聞いて取るのをやめました。


よくわかるPHPの教科書
よくわかるPHPの教科書

4月に読了。プログラミング初心者でもOK。読みやすくて分かりやすいのですが、ある程度学習が進んでから読み返すと粗の見えてくる本でもあります。

代替となる入門書としては、プリペアードステートメントを使ってて感心したいきなりはじめるPHP(ただし本のレイアウトに難あり)や、「PHPの会社」アシアルのイラストでよくわかるPHPあたりが良いかな、と。

いずれも200ページ前後で、300ページある『よくわかるPHPの教科書』よりも情報量は少ないです。プログラミング未経験者のPHP入門は、「これ1冊でOK」な500ページ以上あるような入門書にいきなり取り組むより、薄い入門書を1冊読んでプログラミングの感じをつかむ → 充実した入門書を1冊読んで知識を本格化する という流れの方が挫折しにくいと思います。

※「充実した」の基準:MySQLは必須、オブジェクト指向まで載っているとbetter


Webサイト制作者のための PHP入門講座
Webサイト制作者のための PHP入門講座

8割ほど読んだところで積ん読。残りはCodeIgniterが必要になったら読む予定。Hello Worldからフレームワークまで一気に駆け抜ける。PHPのコードは、セキュリティにもしっかり気を配っていて好印象です。MySQLを全く扱っていないのが弱点で、オススメには一歩足りず。


Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本
Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本

11月に読了。PHPとMySQLの基礎を固める本。オブジェクト指向が抜けているのは残念だが、HTTP通信の話やDB関係は充実している。2008年の本。MySQLの設定等、現在では通用しない部分もあるので、オススメには一歩足りない。


PHP 逆引きレシピ (PROGRAMMER’S RECiPE)
PHP 逆引きレシピ

調べ物用。「こういう機能はどう作ればいいんだろう」って時に、目的から探せるので便利。オススメ。


パーフェクトPHP (PERFECT SERIES 3)
パーフェクトPHP

現在読書中。実務者向けの本。PHPの基礎も載ってますが、言語仕様のつまづきやすいポイントや、PHPのオブジェクト指向の構文等、他の言語でバリバリ書いてきた人向け。PHP実務者必読! と言いたいくらい素晴らしい内容。オススメ。

ただし、PHPでプログラミングを学んできて、オブジェクト指向は使うほうは出来るけど、クラスの設計とかはちょっと……という私のような人は苦労すると思います。


独習PHP 第2版
独習PHP 第2版

現在読書中。良くも悪くも教科書的。オブジェクト指向プログラミングを初歩からきっちり解説してあるPHPの入門書は少ないので、本書は貴重な存在。難点は、(1) Windows環境を前提とした解説(環境構築はLinux向けも載っているが、本文のコードはWindows環境) (2) 文章やサンプルコードが退屈 の2点。


PHPに関しては、パーフェクトPHPまで読み終えたら一段落つくかな、という印象です。フレームワークに関してはCake PHPを学習していこうと思います。


☆MySQL

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
基礎からのMySQL 改訂版

10月に読了。MySQLの解説は分かりやすく、充実している。PHPも載っているのでMySQLを利用したいPHPerには最適。HTMLも載ってるが、10年以上前のスタイルなので真似してはいけない。


SQLは、CRUD文を一応書けるよ、という程度で、セキュリティやスケーラビリティ、MySQLのチューニング等、課題が山積。2013年に力を入れたい分野の一つ。


☆Ruby

たのしい開発 スタートアップRuby
たのしい開発 スタートアップRuby

Rubyのカルチャーに触れる本。Ruby入門者の1冊目にオススメ。


たのしいRuby 第3版
たのしいRuby 第3版

しょっぱなから「メソッド」「オブジェクト」といった用語が説明なしに出てくる等、初歩から載ってる割に初心者向けの配慮が不足している。Rubyの構文の気持ちよさを体験することができたのは良かった。


Rubyに関しては、Railsやりたいなあと思いつつやれずに終わった2012年でした。2013年はRailsやります。


☆Perl

新版Perl言語プログラミングレッスン入門編
新版Perl言語プログラミングレッスン入門編

私にとって、本書は「Perl入門」というより「正規表現入門」です。Perlの構文は今ではすっかり忘れてしまいましたが、本書で学んだ正規表現は毎日のように使ってます。解説が非常に丁寧なので、Perl入門者のみならず、プログラミング初心者にもオススメします。


Perlに関しては、『Perl言語プログラミングレッスン』を再読して、積ん読になっている初めてのPerl 第6版も読んで、手元で動かすスクリプトはPerlで組めるようになりたいな、と思ってます(現在はPHPで組んでます)。


☆ActionScript

Essential ActionScript 3.0
Essential ActionScript 3.0

現在読書中。私は、オブジェクト指向プログラミングの基礎を本書で学びました。基礎からの丁寧な解説と、実際に動く本格的なアプリケーションの作成を並行して行う。私の好みにドンピシャの1冊。ただし、分量が非常に多い(邦訳紙版は900ページ超)。


ActionScriptは「JavaScriptの皮を被ったJava」です。言語も環境もよくできてると思うのだけど、世間的には衰退するという予想が多いんですよね。個人的には、Angry BirdsのようなカジュアルゲームをPC/スマートフォン両対応で出す際には、Flashが現在の最適解、と思ってます。とはいえ、私はFlash制作者になりたいわけではなく、ActionScriptは趣味です。


☆新年の抱負

やりたいことの優先順位をつけると、

SQL(MySQL) > Ruby(Rails) > JavaScript > PHP > その他

って感じですね。SQLは仕事にも関係するし、やってて楽しい分野でもあるので、最重視。Rubyは新しい世界を知るため。JavaScriptは、覇権言語になりそうなのでやっとこうかなと。PHPはライスワーク。

その他としては、正規表現(日常使いの便利ツール)、Perl(YAPCを楽しむため)、Java(オブジェクト指向を学ぶため)、C(プログラマーの一般教養)あたりをやりたいな、と。


また、特定の言語に限らないトピックとしては、自動テストの書き方、走らせ方。現在は、仕事でも(!)、プライベートでも、テストを全く書いてないので。gitに関しても、一度学びの機会を作りたい。

あと、エディタ。PHPはPhpStormで決定だけど、それ以外の言語をどのエディタで書くか。vimはサーバで設定をいじくる時に使うエディタとしては十分だけど、モードが面倒なのでメインとして使うには不安を感じる。一方、emacsはデフォルトのキーバインドがイケてないのと、カスタマイズの敷居の高さが難点。どちらかに決める突破口があれば良いのだけど。

今年もよろしくお願いします。

たのしい開発 スタートアップRuby
たのしい開発 スタートアップRuby

↑は書籍版ですが、私が購入したのはGIHYO DIGITAL PUBLISHINGの電子版です。技評の電子版は、DRM無しのPDFなので扱いやすいです。PCで、画面の左半分に本を開いて、右半分でターミナル等の操作をする、という読み方(使い方?)が出来ます。

本書『スタートアップRuby』は、その名の通りRubyの入門書です。本書がユニークなのは、Rubyというプログラム言語の入門書ではなく、Rubyを取り巻く文化であったり、Rubyを使った開発スタイルの入門書であるという点です。

読了すればすぐにRubyを書いたりRailsで開発したり出来るようになる、という本ではありませんが、Ruby入門者は「急がば回れ」で読んでおくと良いのでは。

完全なプログラミング初心者でも、飛ばし飛ばしであれば読めますし、必要なエッセンスはある程度伝わるでしょう。メインターゲットは、Ruby経験は無いが、Rubyに興味がある、というプログラマーです。


今まで、仕事でもプライベートの学習でもWebアプリケーションフレームワークというものを使ったことが無かったので、Railsの手軽さには驚きました。

テストの話などは深く理解できたとはいえませんが、今いる会社でやっている、変更を加える→手動で実際に動かしてテスト という非効率的なやり方に比べれば、自動テストという手法は素晴らしい。

『たのしいRuby』は土曜で第3部まで終わったので区切りをつけ、今日は再び『Perl言語プログラミングレッスン』をやりました。

『Perl言語プログラミングレッスン』の不思議なたのしさの源泉は、丁寧な解説と構成にあります。文章も適切ですが、それ以上に読者に与える情報の順番が適切で、よく整理されている。結果として読者は、不明な点を解消しつつ、着実にステップアップすることができます。

Perlのモットーは「There's more than one way to do it.(やり方は他にもはある)」。一つの機能を実現するにも様々な書き方ができる。そのため、初心者向けの言語としては向かない印象もあります。しかし、『Perl言語プログラミングレッスン』では、結城浩氏の巧みな整理によって、様々な書き方があることに伴う混乱は最小限に抑えられています。

一方で、Perlに戻って実感するのは、Rubyのラクさ。Rubyは、行末のセミコロンだとか、条件式の括弧だとかいっためんどくさい要素が排除されています。したがって、プログラミングの好きな人が、プログラミングの楽しさを味わうには向いている言語だと思います。

このページのトップヘ