スパーク・ラボ株式会社に入社してました!

2010/10/1よりスパーク・ラボ株式会社に入社しました.


前職はいわゆるSIerでエンジニアをしていました.新卒で入社し,約3年半の勤務となりました.


振り返ってみると,新システムの立ち上げにプログラマとして関わり,その後の保守も担当することができ,システムが生まれ,維持されていく過程を経験をさせてもらうことができました.また,お客様はいわゆる大企業だったのですが,自分たちの会社にしては珍しく直請けで契約しており,お客様と直接やりとりをさせてもらうということもできました.


こんな恵まれた環境だったのですが,ひょんな事からインターネットの世界を知る事になります.2008年頃だったと思います.きっかけは,何か技術的な調べものをしていたときだったでしょうか.インターネットのサービスを作っているベンチャーの特集記事が目にとまりました.そこでは,自分たちで考えたウェブサービスを自分たちで開発し,自分たちで運用しています.しかも開発手法も先進的で,朝のミーティングで決まった仕様を夜にはリリースしてしまうのです.これはどんなに小さな案件でも設計書のレビューが必要で,バージョン管理システムのチェックアウトもリーダーに頼む必要があり,チェックインも申請書が必要な前職の現場では不可能なスピード感でした.衝撃を受けました.


と同時にこのベンチャーの感じ,どこか懐かしいな,と考えてみると,大学の研究室での記憶が蘇ってきました.大学の研究室といえばUnix上でemacsを使ってC言語でガリガリシミュレーションのプログラムを書く,というようなアツい環境でした.大学で朝から晩まで研究室に入り浸ってみんなであーでもない,こーでもないと参考資料を眺めたり,プログラムをデバッグしたり.週一回の進捗報告の為にみんなで夜遅くまでレジュメを書いたり.


大学では,4年生になるまでテニスばっかりしていて,プログラムの講義は出来る人のを写させてもらっちゃうようなダメ学生だったので,4年生の1年間がなければ今の自分はないのではないかというような大変だけれども濃い時間を過ごす事ができました.


そんな体験をしてきたからか,恵まれてはいるものの,変化の少ない環境にいることが段々と不安になってきて,技術的な成長が止まってしまうんじゃないか,このままコードを書かないで数年後には管理だけの仕事をしている自分が頭をよぎりました.側にシフトするような状況になるんじゃないか,と考え始めました.PGからSEになってPMになるというキャリアパスSIerでは一般的だと思いますが,もっとコードを書きたい,技術者として成長したいという思いが強くなっていったのです.


もちろんPG->SE->PMというパス,経験を積んだ技術者は管理側に回ってお客様との折衝やスケジュール管理などを担当するというやり方を否定するわけではありません.請負という仕事の性質上,お客様とのやりとりは必須ですし,業務の知識がないとお客様のやりたいことをシステムに置き換えることはできないとは思います.
どちらが良い,悪いということではなく,両者は別物なんだ,ということだと今は思っています.


成長する為には,ある程度自分を追い込んで全力で走らないといけないなぁと感じました.


転職を考え始めました.でも,業務システムで身につけたスキルでは,Web業界に転身するのは難しそうだなということも実感していました.ただ,Web業界はSIerな世界よりはできること,作ったもので評価してくれるような印象をもっていました.


それから思いを少しずつ行動に移していきました.業務が終わった後,喫茶店に直行し,閉店までねばって本を読んだり,コードを書いたり.しばらくしてIT勉強会カレンダーを見つけ,東京では有志で技術者が勉強会というものを開いている事に気がつきました.勉強会のページを見ていると,皆さん第一線でバリバリやっているような方ばっかりで気後れしていたのですが,「初心者」と名のつく勉強会を見つけました.それがPHP初心者勉強会でした.この勉強会に参加したことで人生が変わったと今振り返って感じます。


この勉強会は講師がいて,机に座って話を聞くようなスタイルではなくて,毎回課題が出され,次回までに完成させてレビューというスタイルでした.当時は隔週で開催されていたので,間に合わせるのがかなり大変だったのですが,なんとか食らいついているうちに,段々とPHP + MySQLなアプリが作れるようになってきたのです.


そして,2009年の夏休みにATND検索( http://ojimac.sakura.ne.jp/atndapihttp://atnd-kensaku.net )のプロトタイプを作成,勉強会メンバーに見せたところ,これ,公開した方がいいんじゃない!?と言っていただき,体裁を整えてリリースしたのでした.単純なアプリではありますが,サービスを形にするという経験は少しではありますが自信もつきましたし,何と言っても自分で考えて自分で作ったサービスを世に出す事がこんなに楽しい事なんだと知ることができました.


今年になってからは,本に載っていたオレオレフレームワークで書き直してリニューアルしたり,iPhoneで見た時用のページを作ったりと少しずつサービスを成長させて行きました.やっと自分で作ったと言えるモノができました.


それからしばらく以前のように悶々とコードを書く日々が続きました.友人とJavaScriptの本の読書会をしたり,フレームワークの勉強をしたり.


そして2010年になり社会人になって4年目に突入しました.技術的にはまだまだなのは自覚していたのですが,タイミング的には今年しかないだろうなと思って情報収集を始めました.


そして偶然にもTwitterのフォロワー経由でスパーク・ラボの社長@junkeyさんのつぶやき( http://twitter.com/#!/junkey/status/12955713541 )がRTされてきて興味を持ってHPを見てみると,「1人でサービスを作れるエンジニア」を理想としていて自分の理想像と重なっていて,ここで自分を追い込んでみようという気持ちになってきました.それから意を決して連絡し,面接→内定を頂きました.


今は毎日UnixPHPと格闘する日々です.


今の自分が居るのもPHP初心者勉強会の主催の@2chdephpさんはじめ勉強会メンバーの方々,大学の恩師などいろいろな方々のおかげだと思っています.本当にありがとうございます.


これから世の中を楽しくするようなサービスを生み出せるように突っ走っていきます!

作業ログ(2010/09/28分)

  • cakephp
    • prefix routingはできたので、Auth Componentと組み合わせて

http(s)://domain/controller/action/

とアクセスしたときのログイン認証はUsersテーブル、

http(s)://domain/admin/controller/action/

とアクセスしたときのログイン認証はAdminsテーブルを使用するようにしたいけど,
formをPOSTすると,

http://domain/admin/admins/login

というURLにアクセスしてしまい,missing controllerになってしまう.
$this->Auth->userModelを書き換えてもうまくいかないので,ググっていると,
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2455&forum=3&post_id=6210#forumpost6210
という投稿を見つけたので明日以降試してみる.

作業ログ(2010/09/23分)

自宅で作業

作業ログ(2010/09/24分)

自宅で作業

<?php
// oauth componentをincludeする
App::import('Vendor', 'oauth', array('file' => 'OAuth' . DS . 'oauth_consumer.php'));
class MainController extends AppController {
        var $name = 'Main';
        var $uses = null;
        var $helpers = array('Form');

        function index() {}

        public function twitter() {
                $consumer = $this->createConsumer();
                $requestToken = $consumer->getRequestToken('http://twitter.com/oauth/request_token', 'oauth認証後に戻ってくるcallbackurlを書く');
                $this->Session->write('twitter_request_token', $requestToken);
                $this->redirect('http://twitter.com/oauth/authorize?oauth_token=' . $requestToken->key);
        }

        public function twitter_callback() {
                $requestToken = $this->Session->read('twitter_request_token');
                $consumer = $this->createConsumer();
                $accessToken = $consumer->getAccessToken('http://twitter.com/oauth/access_token', $requestToken);

                $myposts = $consumer->get($accessToken->key,
                                           $accessToken->secret,
                                           'http://api.twitter.com/1/statuses/user_timeline.json',
                                           array('count' => 10));

                // 出力確認用
                foreach( json_decode($myposts) as $post ) {
                        echo $post->text . '<br />';
                        echo strftime('%Y/%m/%d %H:%M:%S', strtotime( (string)$post->created_at )) . '<br />';
                }
        }

        Private function createConsumer() {
                return new OAuth_Consumer('Consumer key', 'Consumer secret');
        }
}