24時間でウエブサービスを作る

去年の夏の始め、「個人ウエブ・サービスを作る」という目標を決めた。決めたにも関わらず、他の事に重点をおき結局何もやらずに去年の夏は終わった。やらなかった人で終わって良いのか?リベンジしなくて良いのか?

今日は2008年8月12日のランチタイム。妻と娘が日本から戻ってくる18日まで5日程ある。今やらなくていつやれるのであろうか?今夜から始めて、17日、日曜日の夜まで、上手く時間を使えば、24時間位時間を作れるだろう。今夜始める。

何を作るのか?

既にありふれたもので、新規性は全くないのであるが、ブックマーク・サービスを作る。理由、ブックマークサービスの一つであるdel.icio.usは、僕がもっとも頻繁に使う、ウエブサービスだから。一年以上前からマイ・バージョンのブックマーク・サービスを作ろうと思い続けてきたのも理由である。どうか、今あるサービスを模倣(クローン)しても意味ないじゃないかとはおっしゃらないで下さい。

プロジェクトのゴール?

マイ・バージョンのブックマークサービスを開発し、パブリックな場所に置く(ホスティングする)。二つの基本機能:1.ブックマークの管理。2.友人とのブックマークの共有。

なぜ24時間?

日本で働いているRuby Hacker、DominiekのBuilding a .com in 24 hoursに影響されて。

なぜ個人ウエブ・サービス?

個人サービスを作るコツのリンク先のブログエントリーに激しく影響を受けたので。

開発環境?

一年前はJava&Tomcatで行こうと考えていたが、ここ半年程、スクリプト言語に思いっきり惹かれている。今回はPythonとDjangoを中心に開発して行く。ツールはIDEから離れて、テキストエディタであるvim。

今夜、8月12日夜、プロジェクト開始

8月12日(火)

Software development Manager – 1時間30分

Unfuddleにアカウントを作成。レポジトリーにGitを選択。Gitは今話題のVersion Control Systemです。今日までGitを殆ど使った事がなかったので、チュートリアルから始めいきなり苦戦。UnfuddleのHelpにてUnfuddleがらみのところは解決。あと下記のリンクが役にたった。

Gitに何かコミットするために、Djangoプロジェクト及びアプリケーションの元となる部分を作成した。そしてチェックイン。

Unfuddleを選んだ理由:200MBの無料ストレージ、かつプライベート用Gitレポジトリーを提供している所は他にあまりない事。ReadWriteWebでも紹介されていた事。

つまずいた点:gitを使う為にssh用にパブリック・キーを設定しなければいけないのだが、その辺りの理解が浅く時間をロスした。

今日中(8月12日)に、レンタルサーバーを借りるところと、ドメインを取得するところまでしたかったのだが、これ以上やっていると明日に響くので、一旦中止。

8月13日(水)

ドメイン登録 及び レンタルサーバー - 2時間

ドメインは評判が高い、Gandiで登録。登録自体は簡単だった。登録ドメイン名はyou29.com、日本語発音でユニークと発音する。ちょっと無理やりだが。税金込みで$15でした。僕の意見だがHelpが読み難い。フォントも小さいし。

レンタルサーバーは、slicehostで一番安い256sliceを借りた。DominiekのBuilding a .com in 24 hoursでも紹介されていたが、自分が知る限り一番安いVPSホスティングです。slicehostも評判が良いのが決め手。価格は$20/月でした。初回は3ヶ月分購入しなければならない。Linux DistroにはUbuntuを選択。ここの設定もスムーズ。

つまずいた点:取得したドメインとレンタルサーバーのIPアドレスをDNSに登録して結びつけなければならないのであるが、Gandi、slicehost共に、DNS Hostingを提供していて、僕は、slicehostで提供されているものを使用したかったのであるが、Gandiのものがデフォルトで有効になっていて、GandiのDNS HostingからslicehostのDNS Hostingに切り替える方法を見つけるのに1時間以上費やしたと思う。Gandiのヘルプが読みやすければ、、、、、

今は、Peets Coffeeからこれらの作業をしたのだが家に帰って、レンタルサーバーにApache、MySql、Git、Djangoなどの設定をしようと思う。

サーバーの設定もろもろ – 3時間

Apacheをインストールする前にユーザー作ったり、SSHの設定したりやる事いっぱい!おー。
UNIXシステム・アドミニストレーターのお仕事って大変なんですね。今日まで分からなかった。Linuxサーバーの設定が良い経験になっている。
MySQLのインストールはコマンド1発。
Apacheのインストールもコマンド1発。これでyou29.comにアクセスすると”It Works!”の文字が表示されます。
一応PHPも入れとこうかな?いつか使うかもしれないし。今のところ使用しないのでa2dismod php5 で無効にする。
次はEmailの設定:Riverse DNSの設定がDNSに反映されるまで時間がかかるので後回し。
Djangoのインストール。
次はGitの設定:git-coreのインストール、Public-Keyの設定、初めてのClone成功。
RDNSがアップデートされないので、Emailの設定は明日以降。
slicehostはヘルプが充実している点がGREAT!

つまずいた点:サーバーの設定がこんなに大変だと思わなかった。Linux回りの知識をもっと鍛えないと!

サーバーの設定に飽きて来たので、ロゴを作ってみた。-> LOGO

既に合計で6時間30分経過。24時間で出来るのか?まだコード書き始めてないし。

今日まで、Djangoを使ったアプリはローカルのコンピューターで開発用サーバーでしか動かした事がないので、明日はコードを本格的に書き始める前に、アプリケーションのディプロイ方法に付いて確認しないと。

8月14日(木)

開発環境及びサーバー環境設定(続き) – 1時間30分

  • mod_pythonのインストール、Linuxにインストールするのは初めてなのでテストコードも書く。確認完了。
  • メール・サーバー (postfix)のインストール。その前に、DNSの設定。ヘルプを読みながら何とかこなす。オー、自分のホストから
  • メール・サーバのセッティング一つとっても、アドミニストレーターの仕事って結構難しいんだなー!
  • メール・サーバー・ホスティングする場合はブラック・リストに載らないようきっちりセキュリティの設定をする必要がある。

レンタル・サーバーの設定はこれで大体完了。初めてなので、ちょっと苦労したが、良い勉強になった。システム・アドミニストレーターの皆様、お疲れ様です。皆さんの凄さが分かりました。

コーディング – 2時間30分

  • 作業をしている間にDjangoのBetaがリリースされた。昨日、インストールしたばかりだが、Betaにアップグレード
  • モデル(ORM)の定義
  • MySQLインストールしっぱなしで設定がデフォルトのままだった。又設定だ。ウエブ・アプリのホスティングってサーバーの設定の仕事が多いのね。見積もりが甘かった。
  • アプリケーションをディプロイする為のsetup.pyを書く。Python初心者なので、全て調べながら書かなければならず、時間がかかる。何とかコマンド一つでアプリをディプロイできるようになった。
  • Django Adminを使用する為の定義を書く。
  • ホームページをDjangoから出力されるように書き換える。
  • 開発環境でテスト後、サーバーにディプロイしてみる。とりあえず、Mainページ、Django提供のアドミンページは動いた。

既に合計で10時間30分経過、ちょっと時間が足りないような。今のところ、モチベーションだけはある。明日は、ユーザー・レジストレーション・ページ、ブックマーク登録ページ、ユーザー用ブックマーク表示ページなどをViewとテンプレートを書く予定。

8月15日(金)

コーディング – 4時間

  • 昨日の作業の確認
  • Viewとテンプレート
  • CSS書いていたら時間を浪費した。

今現在、合計で14時間30分。残り、9時間30分。出来るのか?

8月16日(土)

コーディング – 8時間30分

  • 今日もCSS書いていたら時間を浪費した。
  • メイン・ページのデザインなど
  • ユーザー登録機能
  • ブックマーク登録機能
  • ユーザー用ブックマークページのデザイン+CSS
  • 進捗があまりないのに、時間は過ぎる。。。。

UIのデザイン及びCSSは苦手なのだが、そこに時間を取られて前に中々進めない。

今現在、合計で23時間。残り1時間。明日一日あるので、どこまで出きるのかな?予定通りにはいかなさそう。最低限の部分はがんばって作ろう。

8月17日(日)

コーディング – 7時間30分

  • まずはコードがなくなると困るので、Gitでチェックイン。Gitはまだまだ使いこなせていない。
  • UIの続き。苦手な部分に時間がかかる。
  • 今まで作った分を試しにサーバーにディプロイしてみる。”しかし”まずは、スタティック・ファイルをインストールするためのPythonのsetup.pyを書いたのだが、書き方が分からず1時間ロス。そして、ローカルのマシーンのApache + mod_python環境にディプロイしたのだが、また動かない。開発用Pythonウエブ・サーバーでは動いていたのに。。。ネーム・スペースの問題でした。そして、また時間のロス。そして、プロダクション・サーバーにディプロイ、今度はイメージが表示されない。環境設定の問題のようだ。これでOKかなと思って、一通り動くか試してみるが、いきなりログインできない。またバグFixだ。** Djangoで開発している人は結構いるようで、解決方法はインターネットですぐ見つかった。**
  • ブックマークの共有方法に付いて考える
  • 細かいバグの修正
  • 明日は寝坊できないので、後1時間程で今回のプロジェクトは終了しようと思う。
  • 今日2度目のディプロイをこれからしよう。
  • 今まで苦労した甲斐あってディプロイはスムーズ。Gitを使ってコードを全てUnfuddle上のGitリポジトリーにチェックイン、そして、サーバー側から全ての変更をGitリポジトリからPULL(コマンド名)して、そしてインストールスクリプトを走らせるだけ。多分、Apacheを再起動しなければならない修正は加えていないが、念のため、再起動。リリース完了。
  • アカウントを作って、テストしてみた。機能は少ないが一応動いている。
  • これで、今回のプロジェクトは終了とする。

まとめ

今回初めてウエブ・アプリと言えるもの(<-???)を、個人サービスとして作った。組織の中でのウエブ開発とは違って一歩踏み出せたと思う。作業に付いて:サーバーの設定にかなりの時間を割かれた。システム・アドミニストレーターの人達の大変さを、少しだけ垣間見れた。開発作業では、苦手なユーザーインターフェースのデザイン及びCSSにかなりの時間を割いてしまった。もう少し効率的にCSSを書けるようになるために、日々鍛錬が必要だな。今回は、時間がなかったのでJavaScriptの使用は控えた、そこでハマッテ前に進めないことが目に見えていたから。開発言語に選んだPythonに付いて、一ヶ月程前から始めたのだが、シンタックスを覚えてなくて苦労したが、特別なコードを書くような事もなかったので、なんとかなった。フレームワークに選んだ、Djangoに付いて、かなりの部分をフレームワークが行ってくれるので、開発するのが楽です。達成度に付いて、当初考えていた、タグ・クラウドとか、友達機能とか、RSSフィードとかまで実装する時間がなかった。最低限の機能しか実装できなかった。時間を見つけてコツコツアップグレードしていきたい。一時間作業したらリリース(ディプロイ)みたいな、アジャイルな開発を実践して行きたい。

トータルの開発時間: 24時間 + 6時間30分(オーバータイム) -> 30時間30分

ウエブサービスへのリンク you29.com

Hidekiのブックマーク: Hideki’s Bookmarks

you29は日本語読みで”ユニーク”と発音します。音の通りいつかは”Unique(ユニーク)”なサービスを目指します。今のところは、ぜんぜんユニークではないですが。

最後に、機能的にまだまだなので、使って下さいとは言えませんが、それでも使ってくださる人がいたら幸いです。

おしまい

Advertisements

3 thoughts on “24時間でウエブサービスを作る

  1. おぉぉぉぉ。実行に移すところがすごいなぁ。
    実体をみることができないので、どこまで進んでいるのかよくわからないけど、楽しみにしてます。
    CSS は気になりだすと止まらないので、鬼門ですね。

  2. Pingback: » 肉の日と同じコンセプトね Life after reading Startup

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s