Webアプリ開発にはデザイナーとプログラマーの協力が必要だ。 開発に関わる人数が増えてもスケールするやり方が必要だ。

目標

  • デザイナーは自分のWebアプリを自分でビルドできるべきだ。
  • プログラマーはデザイナーが自分のWebアプリをビルドするのに黒い画面(ターミナル)を使わせてはいけない。
  • CMSだけで全機能をカバーできないWebアプリはバージョン管理されるべきだ。

現状

  • 大半のデザイナーは黒い画面を使わない。
  • 大半のデザイナーはAdobe Dreamweaverを使ってマークアップする。
  • Macを使わないWebデザイナーも多い。
  • 実質、デザイナーにとって一番使い易いバージョン管理システムのクライアントはDreamweaverである。

やるべきこと

  • デザイナーが一人で構築できるWindowsとSubversionを使った開発環境とそのマニュアルを作る。
  • ビルドに必要な各種コマンドを黒い画面を使わずに実行する方法を作る。

問題点

  1. Windows上でRails+SSLを簡単に使う方法
  2. データベースの扱い
  3. Adobe Dreamweaverがかなり高価
  4. プロジェクト固有の設定/アプリ
  5. ターミナルを使わないコマンド実行

1はこちらの記事のコードで行けそうです。

参照:SSL 上で WEBrick を動かす – Rails で行こう!

4はinstall.rbとかを頑張って作る。

5はDreamweaver拡張でコマンドを実行する方法を覚えたのでそれを使う。(別途バッチファイルかrubyのファイルを用意した方がよさそう)

2,3は・・・うーん・・・。

会社(アクトインディ)ではRedmineのチケットとSkypeで仕事が進んでいくので、週1回、1時間、無理矢理理由を付けて集まってミーティングをしています。

最初はコードレビューをしていたんですが、

「Redmineにコードレビュープラグイン入れたからいらなくね?」

ってことで何でもいいので

“誰もがダウンロードできる、動くプログラム”

を持ち回りで作って発表しようということになりました。そういうのを何て呼んだらいいのかわかりませんが、取りあえず“プログラムプレゼンテーション”ということにしました。

1回目:

cocoa*life – Apple Push Notification Serviceを利用した、iPhone クライアントと、Rubyによるサーバの作成。

Objective-Cがgccでコンパイルできることや、cとかと一緒に使える事や、面白いシンタックスをしてることなんて全然知らなかったのでやりたくなりました。モバイルにもWebアプリが絡むと、俄然興味が湧きます。

2回目:

Talkedbun – 日本語テキストトゥースピーチサーバー – p0t

mac版もフリーになってくれると嬉しいなあ。

やってみて感じたんですが、

  • 他人にダウンロードされて実行される
  • 会社名義じゃなくて自分名義(会社はあくまでリンクをはったりするだけw)

だと逆に大変。

ダウンロード出来る状態だとソースとかごまかしが効かないし、自分名義だと「給料分クオリティ出してりゃいいだろう」という妥協もし辛い・・・。

やってる方としても大変ですが、これは面白い勉強法だなあと思いました。

URLにひらがなを指定すると、そのひらがなの音声がmp3で得られるwebサーバーを作りました。

komagata’s talkedbun at master – GitHub

インストール/起動

$ sudo gem install komagata-talkedbun -s http://gems.github.com
$ talkedbun

http://localhost:4567/ にwebサーバーが立ち上がります。

Talkedbun </del> japanese text-to-speech server

例えば、http://localhost:4567/うえからくるぞ、きをつけろ! にアクセスするとmp3が開く、という感じです。

http://localhost:4567/うえからくるぞ、きをつけろ!

SayKana – Mac用音声合成プログラムを使っていて、Mac専用です。

しかも、ffmpegにパスが通っている事を要求するなど、お手軽感がいまいちです。

AquesTalkのWin版dllは組み込むのもFreeなので、本当は

“Windows上でaquestalkのdllとmecabとffmpegを組み込んでRuby/DLを使ってアクセスする”

というのが本目的だったんですが、期限が明日までなので時既に時間切れ

仕事でもデプロイ/リリースは面倒な作業ですが、今回はパッケージングも面倒な作業だと思い知りました。

しかし、道具を使う側にとっては重要な部分なので気を配って行きたい。

WAF の設計方法 – 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 – subtech

Web + App は大人気 Sinatora もそういう考えっぽいですが (誤解しているかもしれません)、Web というのが App へのインターフェイスの一つにすぎず、例えば CLI + App という組み合せもあるし、Desktop GUI + App という組み合せも考慮されています。ロジックのテストはしやすそうでいいですね。でも、もっと富豪的でもおこられないんじゃないかなぁとも思うのです。

WebApp の場合、Web (というよりHTTP) を唯一のインターフェイスとして提供し、例えばCLIだろうがGUIだろうが、HTTP を仲介するようにします。HTTP + App, CLI→ HTTP + App, GUI→ HTTP + App。これは例えばGAEだと、そもそもこういう方法をとることしかできません。Cron もHTTPで特定のURLが叩かれるだけです。ユーザ向けAPIみたいなのがだいたいのサービスでありますが、それをアプリケーションのオーナーまで権限を拡張しているような感じです。

読んでいてすごく面白かったです。

僕も先日、CLIアプリのWebインターフェースを作っている途中で、「ん?」と引っかかっていた部分があったんですが、id:cho45さんのエントリーを見て氷解しました。

require 'sinatra/base'

# Fooがアプリ名だと思ってください
class Foo::Web < Sinatra::Base
  get '/run' do
    # code... 
  end
end

rack(map)もsinatraもこう書くのでrouterとAppの結合が強く、Appを別クラスにして委譲したくなる。

require 'sinatra/base'

# Fooがアプリ名だと思ってください
class Foo::Web < Sinatra::Base
  get '/run' do
    Foo::App.run
  end
end

class Foo:App
  def self.run
    # code...
  end
end

こうすればCLIも同じ様に書けて便利だ!

require 'sinatra/base'

# Fooがアプリ名だと思ってください
class Foo::Web < Sinatra::Base
  get '/run' do
    Foo::App.run
  end
end

class Foo::CLI
  def run
    Foo::App.run
  end
end

class Foo::App
  def self.run
    # code...
  end
end

うんうん。で、gemでのfoo/bin/foo(コマンド)を作ろうとして、「ん?」となった。

foo/bin/foo:

#!/usr/bin/env ruby
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
require 'foo'

Foo::......

あれ?

httpdを立ち上げるコマンドにすればいいのか、CLIを呼び出すコマンドにすればいいのかどっちだろう・・・?

food(foo daemon)とfooの両方をbinに用意する?

んーなんだかなー・・・。

となっていたのです。

「Webだけでいいじゃん」

というのは目から鱗。Webからのテストを充実させれば問題無し!

ただ、「微妙なところ」として上げられている中でも「テストが遅くなりがち」というところは凄く気になっています。

mockもやりすぎると品質が落ちるし、かといって、継続的インテグレーションサーバーを使ってテストしてもらうのは面倒だし、品質の高いままサクサクできる方法がないかと悩んでいます。

@を強制的に使えなくするPECLモジュールがあるみたいです。

PECL::Package::scream

Description Allows you to disable the silence operator (@) to get all error messages

不幸な事故は減りそうです。

090722_112011.JPG

日蝕上手く撮れなかった・・・。

こちら(PHP プログラマが @ を使うべきでない 5 つの理由 – 肉とご飯と甘いもの @ sotarok)発、下記の記事、

PHPでエラー抑制演算子@を正当に使ってるなぁと思ったケース – それ図解で。・・・tohokuaikiのチラシの裏

includeって、正当に読み込んだかどうかの結果を返してるんですよね。

これ知らなかったです。

既にこちら(includeの返り値について – 受難系 – sideport)で触れられていますが、includeは先のファイルのreturnを引数に受けるので要注意ですね。

参照:includeは返り値を取る – p0t

マニュアルにもちゃんと書いてあります。

PHP: include – Manual

例5 include()とreturn()文

return.php
<?php
$var = 'PHP';
return $var;
?>

noreturn.php

<?php
$var = 'PHP';
?>

testreturns.php

<?php
$foo = include 'return.php';
echo $foo; // 'PHP'と出力されます
$bar = include 'noreturn.php';
echo $bar; // 1が出力されます
?>

perlのpackageも慣習的に最終行にreturnすら略して、

1;

と書きますよね。(最近は違うのかな?)

それを裏切って、以前の僕のエントリーの様にincludeのreturnの積極的な利用と@のエラー抑制とphpの複雑な型比較を組み合わせると、混沌とカオスが両方そなわり最強に見える。暗黒が持つと逆に頭がおかしくなって死ぬ。

そういうところを乗りこなそうと四苦八苦するのも好きです。

Darjeeling </del> redmine theme

会社で開発プロジェクト以外にも、タスク管理としてRedmineを使っています。WikiはGoogleサイトなのでチケットの機能以外はほぼ無効にしています。

エンジニアでなくても、若い子らはどんどん活用していってるんですが、少し年齢が上の方にはちょっと分かり辛いと思ったのでRedmineのちょっと見易いテーマを作ってみました。

変えたところ:

  • リンクはなるべく青で下線を出すようにした。
  • メニューの間隔を広げた
  • フォームなどのパーツはブラウザ標準の見た目にした。
  • 期限日が過ぎてるタスクを異常に目立つようにした。

インストール(コンソールの場合):

cd /path/to/redmine/public/themes
git clone git://github.com/komagata/darjeeling.git
touch $RAILS_ROOT/tmp/restart.txt

インストール(ftpなどの場合):

””管理”” → ””設定”” → の”“テーマ”“プルダウンに”“Darjeeling”“というテーマが出てる筈なので選択してください。

変なところがあれば教えて頂けるとありがたいです。

参照:komagata’s darjeeling at master – GitHub

id:dandasoがフィヨルドに遊びに来てくれました。

3人ともPCを開き、一人はリリース作業をしながら話すというスタイルでおもてなしも糞もあったもんじゃなくてすいません・・・。(Windows, Mac, Ubuntuと3人ともOSが違うのも面白かった)

アクセス解析とSEOについてためになる話がきけたんですが、それとは別に気になったのが、最近僕がハマっている「ツールを使った業務の管理」についてです。(特にRedmine)

要は”“組織の人数”“と”“開発スタイル”“によって効率の良い方法が違う。ということです。

組織の人数:

  • 3人
  • 20人

開発スタイル:

  • 営業主導
  • エンジニア主導

id:dandasoとの話で分かったこと:

  • 少人数、エンジニア主導の場合は管理の必要性があまり無く、BTS/ITSなどあまり使わない方が効率が良い。
  • 一定上の人数、営業主導の場合はBTS/ITSの導入は結果的には非常に効果があるが、問題点も多い。

BTS/ITSの問題点:

  • 使ってみるまでメリットが分からない
    • More joel on softwareにもあったが、1人で使ってもメリット感が無いと難しい
  • 無視出来ないぐらいの手間の増加
    • チケット登録面倒
    • チケット確認面倒
  • 使い方が難しい
    • 例えば、Gmailやサイボウズ メールワイズは使えてもRedmineは使えないという人も多い

一方でBTS/ITSのメリットはここに書くまでもなく沢山ある。

要は”“1人でつかっても便利”“で”“楽”“で”“簡単”“ならいいわけだ。

既に取りかかっているものもあるが、問題点に対する解決策。

解決策:

  • 1人プロジェクトを作る(ただのTODOとしてまず使ってもらう)
  • 最小限の手間でチケット登録できるクライアントの作成
  • メール以外にもIMを使った更新通知
  • テーマを使った見た目のカスタマイズ
  • シンプル版の作成
    • ユーザーCSS、ユーザースクリプトを使ったカスタマイズ
    • シンプル版のにする機能をそもそも追加。

シフト制業務や遠隔地でのコラボレーション、業務領域の違いなどといったコミュニケーションや手続きのロスを減らすにはRedmineの徹底カスタマイズとMechanize等による徹底自動化が一番だと思うので実際に試してみて報告して行きたいと思います。

暑い!

でかいグラスに目一杯氷を入れて、コーラかライフガードをストローで飲むと何であんなにうまいのか。

R0010098.JPG

ampmでアレが簡単に出来るセットが売ってたのではまっています。

R0010100.JPG

キンッキンに冷えとるぞ!(二回目)

R0010101.JPG

うまい!

1213462954tuaou.jpg

氷コーラと勝手に命名しました。