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

ファイヤードブログ

ディジタル・パブリッシングという観点から、Webサイト制作、電子書籍制作などを。※ブログリニューアル中

KumdlrというRails実装のサイトを作りました

Rails Programming WebDev

Contents

0.はじめに
1.自己紹介
2.作ったもの
2.1簡単な説明
2.2動機
3.作るに至った経緯
4.さいごに

0.はじめに

 サイトを公開したのでお知らせします。普段ははてなダイアリー(http://d.hatena.ne.jp/sthmdnss/)で日常を綴っておりますが、技術的なことに関してはこちらに記す方針に転換しているので、このはてなブログに投稿します。

1.自己紹介

プログラミングをアマチュアでやっている者です。職には現在ついていません。

2.作ったもの

名前 Kumdlr (くんだらー)
URL http://dasen.herokuapp.com/
WAF Ruby on Rails
言語 Ruby
サーバーサイド Heorkuに丸投げ

2.1簡単な説明

 「Kumdlr」は、「xxxで打線組んだw」を投稿できるサイトです。サイト自体の使い方についてはTechCrunch風に書いた別記事をご覧下さい。名前については…まぁ、ギャグです。
 最初に断っておきたいのですが、某レコード会社が受けたのと同じ誹りを免れないのではないか、と若干危惧しています。すなわち「匿名掲示板で自然発生的に生まれたものを私物化するつもりなのか」という非難です。しかし、以下の基準に鑑みて、開発と公開に踏み切りました。ご理解いただけると幸いです。

  • 打線組んだww」というアイディア自体を、商標登録などによって、私物化する意図が無い。
  • OKWave等のサイトも2ちゃん生まれの「xxだけど質問ある?」を自社サービスとして運営しているという事実がある。
  • Butting!という独自の評価機能を付けて独自性を持たせた。
2.2動機

 2ちゃんねるには(主に「なんJ系で」と言うべきか)、「xxxで打線組んだw」というスレッドの種類があります。これは野球における打線という型に何でも押し込むという、なかなか面白い発想だと思っています。ですが、目にするときにいつも引っかかっていたところがありました。それを似たような傾向を持ったスレのテンプレ「質問ある?」と比較して述べてみます。
 「質問ある?」に関しては、スレ主が絶対的な力を持っています。これは、そもそもスレッドの種類に関わらずこれは「>>1」がどうしても力を持ってしまいがちな掲示板では仕方のないことですし、さらに「回答者(「>>1」) 対 質問者(「>>1」以外)」というインタビューの図式を考えれば自然なことです。しかし、「xxxで打線組んだw」に関しては、「スレ主 対 その他大勢」という従属的な形では非常にもったいない気がしていました。「>>1」の考えた打線に、「いや4番はxxだろ」の様にただ口出しするだけじゃなく、「>>1」が考えた打線に対して、対抗するような形で新たな打線を提示できるようになればいいなと考えました。
 後述するように、この「Webサービス」は、私自身にとっての処女作であると同時に習作であるといった趣きが強いのですが、簡易ブログなどの様々な入門向けのRais Appがある中で、あえてこのようなサイトを作ろうと企図したのは以上のような理由があります。    
 また、これ以外の理由をついでに申せば、これが完全に個人的な印象にすぎないのですが、「打線組んで評価する」という形式が、単一の評価軸で決められたトップ10形式のランキングに対する、一種のオルタナティブとして機能するのではないか?ちょっと大げさかもしれませんが、私が「xxxで打線組んだw」を一種のテンプレートとして魅力的だと思う理由がここにあります。

3. 作るに至った経緯

 個人史的な部分はなるべく書かないようにしますが、4月下旬からなでしこリーグのポータルサイト(それもデータヴィジュアリゼーションを駆使した)を作ろうとして、本格的にHTMLとCSS、そしてWebプログラミングの為にRubyを学び始めました(それまでのプログラミング経験としては職業訓練で4ヵ月Javaを学びましたが、学んだだけで実践的なことは何も身に付いていなかった…)。5月中旬にウェブアプリケーションフレームワークとして、Ruby on Railsを採用することに決め、そこから毎日サイトを作るためにローカルな環境で小さなインプットとアウトプットを繰り返してきました。
 それにも関わらず、勉強を開始してから既に4ヵ月以上経った今月の初めになっても、なかなかサイトを完成させられませんでした。その事実に私は自分自身に半ば呆れかえってしまいました(この数ヶ月の間、何も生み出さずにいたという事実に耐えられなかったのです)。「頭の作りが悪いのか」もしくは「未経験者が作り上げるには技術的要求(例えば、700人もの選手データを出場不出場移籍などに鑑みた上で整合性を持たせつつ毎週更新するというような技術的要求)が高すぎたのか」のどちらかが原因だと考えました。そこで、私は自己嫌悪に陥らない為に、後者のせいにして、「技術的困難が少なければ、Railsで「Webサービス」を作れないことない」と言い聞かせ、元のサービスの開発を一旦中止させ、先週からこのKumdlrという簡単なサービスの開発に切り替えることになりました。
 簡易アプリを作成し終えたいま思えば、なでしこリーグのポータルサイト開発は、やはりサイトの構想が壮大すぎたきらいがあり、経験の浅い者にとっては無理強いに過ぎませんでした(こういう所にメンターの存在の必要性を感じます)。
 例えば、RESTfulなWebサービスというのが主流らしいと知り、理想のURIを紙の上で書いたとしても、それをアドレスバーに表示させることはできませんでした。hoge.com/games/division1/2013/league/reds_vs_inacのようなURLを実現するのはRailsではとても困難なのです。他にも、基本的なプログラミング能力が欠けていたために、コントローラで複雑な処理が必要になる場面では、無理やり冗長なコードを書いてごまかすか、インスタンス変数にとにかく値を渡して、ビューでif文を連発してなんとか目当ての値を取り出すと言ったような、保守的でない、翌日にはまるで意図が明確に理解できないコードを書くしかなくなっていまいました。
 他にも難しいことはありましたが(そして今もそれらをどう対処すればいいか分かっていないのですが)、この記事はあくまでKumdlrについて述べるものですから、深く立ち入ることはしないでおきます。とにかく、私はもっと小規模なアプリケーションから始めるべきだったのです。
 このKumdlrというサイトは、あまりコードを書く必要がなかったという面で、とても単純な仕組みになっています。dbフォルダ配下のschema.rb(このファイルを見ると各テーブルとそのカラムを確認することができる)の行数を見ても、なでしこリーグのサイトが現在150行前後であるのに対して、Kumdlrは20行足らずです。コントローラのクラスは2つしかありません。つまりこれは設計の必要がゼロに近かったということであり、コントローラで書くクエリも複雑にならないで済むということです。また、JavaScriptのコードに至っては、「控えめなJavaScript」を意識するまでもなく、jQueryですら1行も書いていません。ただ、いくら単純と言っても、Railsの規約にちゃんと従って、自分のオリジナルなサイトを1から組み上げて行くことは、それなりに(やはり慣れないうちは)大変なことであるには変わりないのですが。
 また、とりあえず何かを作る衝動に駆られたことの他にも、あえてKumdlrを作った理由はあります。本来作りたかったアプリをリリースする前に小さなアプリケーションを公開することで、私が目論んだのは、起こりうる課題を先取りすることでした。それは以下のようなことです。

  • PaaSサイトに登録をする
  • 実際にデプロイをしてみる
  • gitでリモートマシンとのやり取りをして更新作業を行う
  • デプロイ後の更新作業を一通りやってみる。
  • ある程度のSEO対策をする

 むろん、実際にアプリケーションを初めてデプロイするにあたっては、以上のような想定しうる範囲の課題に加えて、予期せぬトラブルに見舞われました。例えばKumdlrをいよいよ公開するという時になって最も苦戦したのは、デプロイの際の公開鍵や秘密鍵などに関係するsshの仕組みです。ざっとインプットを済ませましたが、理解できたとは思えません。じじつ、いま私の頭を悩ませているのは、「ところで、2つめのサービスをデプロイする時の公開鍵って、前と同じやつなの?てか、そもそも公開鍵って、いくつまでとかあるの?sshとか公開鍵ってLinuxの概念なの?え?じゃあ、これからLinux勉強しなきゃいけないの?全く何だよ、"Herokuで簡単デプロイ"とか言っても、結局そこらへんのこと気にする必要出てくるんじゃん…まぁ、ApacheとかThinとかNginxを選んで自分でやる必要がないだけ簡単と言えば簡単か…。はぁ。しゃあないわ、やったるわ、、やればええんやろ、、、」というようなことです。 

4. さいごに

 色々と満足感に満ちたような様子で書き綴ってきましたが、出来たことの何倍も出来なかったことで溢れています。ユーザー登録を必要としない投票機能、スマートフォン対応、titleタグの値の動的生成、faviconの作成、投稿の前の確認画面表示、人気ランキング、Rails4.0・Ruby2.0での実装、ユーザーページ、マイナーなバグフィックス、(インプットはしたものの書けなかった)テスト等等…。使ってくれる人がいるか確かめられていない状況なので、『リーン・スタートアップ』に倣って敢えてやらずに済ませた面もあるのですが、いずれにせよまだまだ実力不足なのでもうちょっと腕を磨きたいです。Kumdlrの様子を見つつ、なでしこリーグのサイトの妥協点を見つけながら、今度はもう少し大きいアプリケーションを作る予定です。
 一応twiiterアカウント(@Kumdlr)を取ったので、アドバイス・意見等あればそこから受けつけているのでよろしくお願いします。もちろんこのブログのコメント欄からでも受けつけています。
 読んでくださった方、ありがとうございました。