読者です 読者をやめる 読者になる 読者になる

Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

Rubyでwebアプリひな形作成CLIツールを作ってみた

Rubyを書いてるの人の大半の目的はRailsの利用だと思うのですが、自分はRails newを試した位しか、した事がありません。
まあ、今のところ趣味で作るサイトやwebアプリにはRailsは多機能過ぎて、もっぱらSinatraHamlで挙動を確認しながら色々試しています。良い点として、自分で必要なGemを吟味して追加する必要があるので、それぞれどの部分が何をしているかが把握できる点ですね。
また、Sinatraを使ったwebアプリの作り方は

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

で1から手取り足取り解説されてて、この本を写経してやり方を覚えればwebアプリが作れるようになります。非常に良い本でおすすめです。

本題

で、いくつかのwebアプリを作っては捨て、作っては捨てをしていると、初期ファイルを書くのが非常に面倒になってきました。
Rails newでひな形を自動でガガガーっと作ってくれるみたいな、自分用のツールが欲しい!と思ったので、CLIツール「Sinatras(名前は超適当)」の作成にチャレンジしてみました。
パーフェクトRubyの第15章を参考に(というか、ほとんど写経)して、何とか完成。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

今のところnewコマンドしかありませんが、

sinatras new <appname>

で、appnameで指定したアプリ名でディレクトリを作成し、

  • 各ディレクトリをよしなに作成
  • Gemfile作成
  • config.ru作成
  • アプリ名.rb作成
  • ビュー用テンプレindex.haml,layout.haml作成
  • git initの実行

等をしてくれます。
実際に実行した様子はこんな感じ

f:id:tomcha0079:20150110200423p:plain

作成されたファイルは・・・

f:id:tomcha0079:20150110200435p:plain

※ 追記
ファイルが作成されたら、もちろんrackupできます。 127.0.0.1:9292 でブラウザからこの画面が出るはず。

f:id:tomcha0079:20150110221147p:plain

f:id:tomcha0079:20150110221152p:plain

あとはviewsの中のhamlファイルをいじれば、簡単なwebページが作れます。cssを作った時はpublicフォルダへ保存しましょう。

パーフェクトRubyを読んで

まだ、頭から読み進めてる途中ですが、CLIツールは第15章に書かれている通りに読み進めていけば簡単にGemファイルを作る事ができました。
作ったGemファイルをインストールする事により、どこでも「コマンド」として実行できます。
今回勉強になったのは、前のブログで書いたモジュールやクラスの機能分離方法の実例が学べた点です。作る過程で体験できるので非常に良いです。

また、この本は「たのしいRuby

Rubyに入門した次に、脱初学者向けとして読むのが丁度良いと思います。
気をつける点は、若干ソースコードに誤植があるのと、おそらくスペースの都合上、コードの一部を省略している点です。
どの部分のコードなのかは、出版元サイトから掲載されているコードがダウンロード出来るので、それを直接見るのがベストです。

エンジニアリングとは

プログラミングの醍醐味は、モノ作りをして完成した時の達成感や動いた時の感動ですが、もうひとつ大事な事として、エンジニアリングによる作業の短縮効果でしょうか。実用的なアプリを作ることによって、今までとはまた違った喜びの体験ができました。

とにかく、rails newみたいにSinatraのアプリが作れる様になりました!やった!
ソースコードGithubにあります。

https://github.com/tomcha/sinatras

アドバイス等があれば、お手柔らかによろしくお願いします。