開発環境について書きだしてみる
Ubuntuベースのシンプルな開発環境という事で参考にならないエントリーをば
スペック
マシン:ThinkPad R61(WSXGA+モデル)
外付けディスプレイ : EPSON(22インチ)
OS : Ubuntu 12.04 LTS
解像度は外付けディスプレイもWSXGA+です、同じ解像度だと色々と捗(る気がします)ります。
日常的な事であればブラウザをある程度広い画面で使いたい時は便利ですね。
1画面で結構広いので外に持ちだして開発するのもある程度は出来たりします、持ち出すときはスマホのバッテリがわりに持ちだしてますが…
開発道具セット
とりあえず、普段使ってるブラウザで開発もしています。
主に動作確認という目的ですが標準である程度できるようですが使いこなせてません、もう少し精進したいところです。
実際はTweetDeck立ち上げっぱなしにして後から泣くために起動しているようなものです。
開発の重要なツールになるエディタはEmacs一択、elispは結構突っ込んでたりします。
言語毎のハイライトモードやscreen感覚で使えるようにする物なども入れてます、デフォルトで入っているansi-termは個人的に気に入ってる機能だったりします。
この画面でさっとgitへコミットしたりとか。
- git
バージョン管理は先程もチラッと出たgitを使っています、ディレクトリ内で簡単にバージョン管理できるのが「それ、魅力」
github大好き
- Apache(と愉快な言語達)
Webブラウザで動くものを作るのでApacheは基本です、大体PHPをメインで使ってる気が。
ズルズルと流れ的に入れてます、基本的にMySQLで問題ない気がしています。
他のDBも試してみたい。
MySQLのコマンドを叩くのが辛いのでGUI管理ツールは必須、テスト用のDBやユーザを用意するのが簡単になりました。
- 端末
Ubuntuに入ってる端末を使ってます、あんまりカスタマイズしてません。
その他、あると嬉しいもの。
- gmusicbrowser
いわゆる音楽プレイヤーです、標準で入ってるRhythmboxも良いのですがこっちのほうが良かったりします。
音楽聞いてると結構集中し始めるので必須だったりします。
gmusicbrowserというソフトが素晴らしかった(+その裏の苦労も込みで)
画像だけですばらしさを語る
ポイント
- ジャケット写真が出てくれる
- MP3のタグを適切にいじらないとTitleが無いファイルが大量に誕生すること
- 思わず、新しくCDをレンタルしに行きたくなる所
数年前に取り込んだアルバムが断片的に残ってたりするので完全に入れなおしたいがためにTSUTAYAあたりに行きたくなってしまいます
Reinforce_Zweiの裏話 第2回 シンプルなのは美しきかな
とりあえず、不定期更新になりそうな裏話シリーズは3回目です。
今回は実装の詳細について語ってみようと思います。
すべてモジュールであれ
0回あたりで語ったのですが「すべてモジュール」いう形で実装しています、Zwei自体に実装しているのは
- モジュールを呼び出すこと
- モジュール内の関数を実行させること
だけです、と言っても一部は初代"Reinforce"の機能をオーバーラップしています。
ディスパッチャも機能として実装はしていますが、あくまでもモジュールにこだわってます。
以下のコードはリクエストを集中させるファイルのコードです
<?php header( 'Pragma: no-cache' ); try{ //require Core Reinforce Zwei //主要ファイル呼び出し require_once("Reinforce.php") ; require_once("Reinforce_Zwei.php") ; require_once("Controller/Base_Controller.php") ; $Reinforce_Zwei = new Reinforce_Zwei ;//Zweiのインスタンス生成 /*Controll with Method*/ if($_GET == null){ $Dis_Controll = "Index" ; $Dis_Method = "Index" ; }elseif( $_GET["Method"] == null){ $Dis_Controll = $_GET["Controll"] ; $Dis_Method = "Index" ; }else{ $Dis_Controll = $_GET["Controll"] ; $Dis_Method = $_GET["Method"] ; } $Reinforce_Zwei->import_module("Dispatcher") ;//ディスパッチャモジュール呼び出し $Reinforce_Zwei->load_method("Dispatcher","dispatch",array($Dis_Controll,$Dis_Method)) ;//ディスパッチャへ処理を引き渡す }catch(Exception $e){ } ?> < try〜catchはどこかで例外処理実装しようとして忘れている証拠です、簡単にプロセスを紹介すると +インスタンス生成 +モジュール呼び出し +メソッド実行(以下の処理引渡し) だけしか、行いません。 あれもこれも詰め込んでメンテナンスが面倒になるのは目に見えているので、機能別に分けてしまう方が後々楽になるという考えです。 おまけとしてディスパッチャのコードも >|php| <?php class Dispatcher{ public function dispatch($Controll,$Method){//コントローラー呼び出し $Controll_Name = $Controll."_Controller" ; $Controll_Path = "Controller/".$Controll_Name.".php" ; if(file_exists($Controll_Path)){//コントローラーの有無確認 あり require_once("Controller/".$Controll_Name.".php") ; $Disp = new $Controll_Name($Controll) ; $Disp->$Method() ; }else{//コントローラーなし require_once("Controller/Index_Controller.php") ; $Disp = new $Controll_Name("Index") ; $Disp->$Method("Hello") ; } } } ?> < コントローラーについては基本的な機能をベースファイルとして構成し、それを継承して実装することになっています。 仮に当該のコントローラーがない場合はIndexコントローラーへ処理を飛ばすように実装しています、このコントローラーがサンプルファイルとしての意味合いも持たせています。 詳細はgithubへ → <a href="https://github.com/masayoshimashita/Reinforce_Zwei/">Reinforce_Zwei - github</a>
Reinforce_Zweiの裏話 第1回 実装開始
模索
ある程度の実装を頭の中で考えて、コードを打ち込み始めたのだが既に前回書いたとおり場当たり的な実装になってるわけでとにかく苦労の連続という。
苦労したポイントといえばモジュールの命名規則ですね、正規表現を改めて勉強する機会になってました。
Reinforceではモジュールはすべて「import_module() 」という関数を介して行うのですが、そこで使う引数のパターンマッチの実装は楽しい方だったかな。
ソースコードの同メソッドの部分を見てもらったらわかるとおり、相当ざっくりと実装しています。例外処理も組み合わせてるので、ある程度はエラーにも対処できるはず。
モジュールもダミーとして単独で動くものでは「Nanoha」やら「Fate」、親モジュールと子モジュールがあるものは「Wolken」の下に「Vita」とか置いてみたりして挙動を試してました。
ダミーの名前の元ネタは言わずもかな、基本的になのはから引用しています。 Reinforceからして引用してるから、仕方ないといえば仕方ないのですが。
ちょっと、実用的なものを作ってみるか
最初にとりかかったのが日時周りのモジュール、とりあえず現在の日時などを取れればいいやと思って軽く実装してました。
この頃は別の仕事をしていたので昼休みを使ってスマホ経由でgistにコードを投げておいて、帰ってから実装するなど変わったことを試してた気がしてます。
githubのクライアントを通して一人でコードを眺めてみて修正部分をissueにまとめとくなどある程度は機能使ってたのかな。
途中まで出来てきた所でまた別のモジュール作ってましたが、結構飽きっぽいんです。
とりあえず、興味があるところまで作ってしまえば満足してしまうのが悪い癖ですね。 この記事の裏では実装が終わってないものがゴロゴロ転がってます。
転換 〜mod_rewrite〜
しばらく、ちょこちょこ作ってみて自分のアプリのほうでも使おうと思っていた矢先に出会ってしまったのが「mod_rewrite」というApacheのモジュール、Zweiでもフルに活用しています。
これをReinforceでも使いたいと思ったんですが「ただのモジュールにしても意味がない」という考えがよぎったのと、本格的なフレームワークとして作りなおしてみたいという思いも重なりZweiの開発が始まりました。
たったひとつのモジュールの出会いがここまで変えてしまうとかなんと恐ろしい。
MVCという概念がよく理解できてなかったので体で味わういい機会にはなったと今は思ってます。
脱線 〜一応、フレームワークは試した事はある〜
このフレームワークを作るしばらく前に既存のフレームワークを試したのですが肌に合わないという理由で投げ捨ててます、規則がガチガチすぎて合わなかっただけですが。
今回はすべてを自分で決められるのとReinforceという資産があるのでそれを生かせるように遊びを入れてます。
誕生 〜Reinforce"_Zwei"〜
ともあれ、ちょっとした思いつきからでかくなっていったようでちょっと小さめに抑えたのがReinforce"_Zwei"です。
発端がReinforceだったら、このフレームワークにもReinforceという名前を入れるのが妥当だと思ってます、2代目の祝福の風が開発に吹き込まれるように。
実装していくうちにちょっとづつ自分が欲しい機能を盛り込みましたが、それは次回のお話。
Reinforce_Zweiの裏話 第0回 発端とか由来
フレームワーク「Reinforce_Zwei」はここから落とせますので適当に煮炊きして下さい → Reinforce_Zwei - github
最初はモジュールの寄せ集めた物
これを作る前に最初に考えていたのは「モジュールを寄せ集めておいて、必要に応じて呼び出せるようにしよう」
というのが最初の考えだった、この仕組みもZweiに組み込まれている。
思想として持っていたのはSimutransというゲームにおけるpakセットという概念だ、このゲームでは建物や地形に車両等はすべて「pak」という形で提供されている。
*1
必要なpakを入れて、不要なpakを消したりするのはSimutransプレイヤーにおいてはよくやることだと思う、この考えは設計思想に多大なる影響を与えていった。
自分自身も「必要なものが必要な時に必要なだけあればいい」というのが物事への考え方になっているのも大きい、他にも影響を与えていったものがあるがそれは次の章
*1:最初に配布されるpakは基本的に国外車両ばっかりなので、日本国内の車両を入れる段階でこの作業を経験することになる。
【第一回 捜査会議 裏話】配布した名刺のリンクを解説してみる
第一回 捜査会議お疲れ様でしたっ!
ThinkPadを持ち込んできた八神です、こんな名刺を配っていたんですが各所にリンクを配しているという踊るらしい仕様になっています。
各所のリンクを説明していまいります
- 上のロゴと社名
踊る好きなら分かると思うので割愛する方向で
- 部署について
- 情報システム部
中の人が情報系の人という事と「うちの人間じゃらちが開かないので業者呼びました」というセリフから推察して社内にそういうシステム専従の部署があると読んで入れています。
-
- システム管理六課
元ネタ1つ目 : 機動六課
これは「魔法少女リリカルなのは Striker'S」というアニメに登場する架空の組織の1部署なのですが、担当範囲が特定されているという事で採用。
この他に一課から五課があるかもしれませんね。
元ネタ2つ目:警視庁刑事部下の組織構造
1〜3課と鑑識などが属していますがその辺もちょろっと参考にしています。
-
- 米沢組 保守班
元ネタ一つ目:米沢さん
相棒に出てくるあの鑑識「米沢守」、相棒の中でも親近感を覚えるキャラの一人です。
中の人の趣味がしれっと相棒本編に出てきたりしていますが、せっかくだから入れてみようかと。
元ネタ2つ目:安積班シリーズ
ドラマ「ハンチョウ〜神南署安積班〜」から採用してみました。
ハンチョウシリーズ全般に登場するPCと踊る3から登場している栗山くんのPCが同じメーカーというつながりも引っ掛けてます、Let's note欲しいんだけども手がでない。
元ネタ3つ目:NEC 米沢事業所
これもまたPCネタからリンク、交渉人真下正義にて小池君が使っていたPCのメーカーですね。
NECのVersaProっていうのですがそのメーカーの国内製造拠点があるというの理由です。
- 名前について
- 八神姓
これは4月1日の軽いジョークから始まったネタです「本物の尾形総一郎は別に居る」というセリフをちょっとだけTwitterで使ってみようと思って「本物のmasayoshiは別に居る」という設定で八神と関係があるキャラクターっぽくツイートしてたんですよ(苦笑
1日限定で終わらせようと思ったら横槍が入ってきて「そこの八神さん、キャラブレブレすぎや」と言われて何かが切れたのか戻すのをやめた次第。
その元ネタは既に元ネタは機動六課の方で紹介しておりますので、適当に探しだして下さい。
以上