姓名生成装置について 詳細説明



構想半年、実装2日。ようやくリリースの日がやってきました。今週は本業の方のリリースも控えています。この日記の存在は職場バレしているのでこんなことをやっているとわかったら怒られそう……。コーディングしたのは連休中ですからね!仕事終わってから睡眠時間削ってちくちく作ったわけじゃないですからねっ!

  • このサイトの読者向け解説

仕事とは関係ないアプリを作ってみたくなってね。作っちゃった。っていうのは半分嘘。面白そうなの思い付いたから作ってみたって感じですね。それも嘘だけど(笑)。
いずれにしろ、このシステムをリリースするためにわざわざレンタルサーバーをお金出して借りたくらいの意気込みはあります。ドメインも取ったし〜。
なんで自前ではなくレンタルにしたかというと、ハードの管理が面倒だったからです。セキュリティホールが見つかるたびに穴埋めしたりしなきゃならんし、ツールのバージョンが上がるたびにどうするか考えなきゃならないし……。俺は仕事でもほとんど開発オンリーだからそういうことをやっていなかったりします。OS周りの知識は気の利いた趣味でやっている人よりも少ないと思います。そんな状態なのでたぶんインフラの設定に時間がかかって、俺の性格だとそこで満足してシステム開発までやらなくなっちゃうんじゃないかなぁと思いました。
もう一つ、理由があって、レンタルサーバーの借り賃くらいなら負担しても大丈夫なサイトになってるからです。年間通して考えるとその程度ならネットでの収入があります。もしこれが完全持ち出しだったらやってないと思うね(笑)。ケチなんでね(笑)。


こんなシステムを立ち上げても誰も遊びに来ないかも知れません。それはそれでいいと思っています。今まで触れたことがない物に触れることができたので既に個人的には元が取れていますね。
人それぞれ感想は違うと思いますが、実際自分で動かしてみたら思った以上に面白くてね。テストを忘れてクリックしまくった(笑)。FAQに書いたように連打してたら面白いのが通り過ぎていったりもした。でもログは残してません。いずれ気が向いたらログ取りモードを実装しても良いかも知れませんけどね。やろうと思えばそれほど大変ではないような気がしてます。セッション管理がめんどいだけ。たぶん。


余談ですが、このシステムの名前をどうするかはちょっと悩んだ。条件はいくつかあって、
・他の人が作ったものの亜流とみなされないような名前
・できればアルファベット無し
・短い
です。
こんな感じのシステムは他にもあるような気がするんですが、「姓名」に的を絞ってそれを完全ランダムに生成するってのは検索してもみつかん無かったんですよ。だから、それを直球で表現するこの名前にしてみました。XXメーカーとかXXinとか付けたらいかんでしょう。やっぱ(笑)。埋もれちゃう。
予定は無いですが、もし他にもシステムを作ることになったらきっと名前で悩むんでしょうね。「装置」シリーズにするのは面白くないからね。つまったらそこに逃げるとは思いますが……。


もう一つこだわりがあります。このシステムではデータをシステム作成者(私)が用意しています。ユーザーが入力してくれたデータを蓄積する方式をとるシステムではありません。もしユーザーが入力してくれたデータを保存するシステムだったら作りませんでした。入力してもらったデータの保存に責任が持てないからです。そのうちそういうのを作ることもあるかも知れませんがうざい免責がずらずら並ぶことになると思いますね。




そうそう。うざいつながりで。上の記事で「うざい」と書いた広告ですが、あえてたくさん入れてあります。広告についてはとある仮説を持っているのでそれを試したいという思いがあります。これだけ入れてもこういうシステムの場合それほど儲かるとは思えないのですよ。でも、それを実際にやってデータを収集しないと仮説でしかないんですよね。
儲からなかったら仮説が証明され、儲かったらうれしいというお得な仕様になっております(笑)。


もう一つ、上には書かなかったけれどうざいものがあります。アクセス解析です。共用サーバーなので自鯖に負荷をかけるのいかがな物かというのがあるので無料サービスを使っています。
このシステムの場合、アクセス解析を入れる意味はあまり無いです。どんな言葉で検索しに来たとかどの曜日どの時間帯にアクセスが多かったとかそういうのを分析してもいいことはあまりないです。
しかし、私の場合はそれが記事のネタになるのでつけました。毎月のアクセス解析記事ではこのシステムへのアクセスの統計情報も公開する予定です。あまりに来訪者が少なかったら世をはかなんで無かったことにするかも知れませんけれどね(笑)。こういうネットアプリのアクセス解析統計情報ってあんまり公開されていないんじゃないかな?




2006年までに偶然できあがったハヤテ、読書感想文、運転免許の3本柱があまりに強力で、それ以降新しいことが何一つできていなかったような気がするのですよ。このシステムが4本目の柱になったらうれしいんですけれどねぇ。そればっかりは自分の力だけではどうすることもできません。私は面白いと思ったのだけれど、それが多くの人に受け入れられるのかは正直想像ができません。


普段読んでくださっている皆様からは特に遠慮のないご意見、ご要望が頂けると思うのでちょっとだけ甘えてみます。
バグとか、こんな仕様を追加したらもっと面白いとかあったら教えてください。すぐに対応できるわけではないですがそういうのをいただけるとほんと助かるしうれしいです。











  • システム的な解説

さて、なにから書けばいい物やら。
いろいろな思いが渦巻いているシステムです。

制約事項

リリース直前に解消しました。例の5c問題です。ちなみに、最も参考になったサイトはこちらです。

AccessMySQLとの問題ですが、私の環境でもここに書いてある方法で回避できました。さらっと書いてあるけれどこういうのって自分で見つけるのは大変なんですよね。
念のため言っておきますが私はこちらの会社の社員ではありませんよ。別の開発会社で働いています。それを信じるかどうかはあなた次第ですけどね(笑)。

開発のきっかけ

仕事なんですよ。仕事。仕事と言ってもね、システム開発の現場では泣くね、いろいろな現場でそれぞれ別の仕事をしているメンバーが集まってディスカッションするみたいな場がありましてね、そこで「新しいことに挑戦するにはモチベーションが必要」っていう話が出たですよ。
そういう抽象的で心地よい響きの言葉は誰でも思い付くんですけれど、その「モチベーション」をどう維持するかっていう具体策になるとなかなか難しい。ありがちなのは「資格」です。しかし、資格はねぇ。特にベンダー系の資格はねぇ。まず、お金がかかる(笑)。おれ、ケチなんでね(笑)。会社からお金出るけどさぁ。会社だって無尽蔵にお金持っている訳じゃないしね。んで、その資格が長持ちするのか生ものなのかわからない(笑)。あれとかあれとか今では忘れ去られた資格もたくさんありますからねぇ。
そこで思い付いた。


作ったシステムを公開するってのはモチベーションになるんじゃないか!?


とね。
それも口で言うだけなら簡単です。自分で実際にやってみて初めて意味がある言葉になります。その方法を思い付いた時に、まさか本当に自分がその道を歩むことになるとは夢にも思っていなかったわけですが……。その道はそれを思い付いた次の瞬間に開けました。



外部仕様

そうなんです。仕様なんですよ。仕様が決まったからこのシステムを作る気になったんです。
公開するシステムを作ることが新しい技術を勉強するモチベーションになるのではなかろうかということを思い付いた直後でした。仕様が脳内に降ってきました。自分でもびっくりした。
なんと言っても難易度が低いのが良い。脳内設計と脳内コーディング(よく使うDBMSと言語でだけど)は一瞬で終わりました。これなら片手間に実装できる!そう確信しましたね。その片手間であっても面倒でなかなか手を付けない俺はダメ人間です……。半年寝かせてしまった。


このシステムの仕様を思い付いたきっかけを語り出すと20年前に遡ります。高校生の頃、創作をしようとしていきなり躓いたんですよね。登場人物の名前が全く思い付かない。現実に存在する友だちの名前を使うのも、特に女の子の名前を使うのは気恥ずかしい年頃だったし、だからと言って架空の人名を思い付くこともままならない。そこで止まりました。むろん物語を考える力もなかったんですけれどね。
もしかすると同じようなところで躓いていて、俺とは違ってその先の才能はある人だっているかもしれないなぁと思ったんですよ。なんで突然思い付いたのかはわからないけれどその時そう思ったから仕方がないです。で、ババっと仕様が脳内でできた。
このシステムの良いところは、単なる「面白いおバカシステム」ってだけではなく、使い方と使う人によってはシステムはそのままに「役に立つシステム」に発展する可能性があることです。現実にはそうならなかったとしても「そうなるかもしれない」と思うとそれこそモチベーションが違います。まじで。
誰の役にも立たず忘れられている可能性の方が大きいのはたしか。でも、占いチックなシステムとかとは違って、役に立つ可能性もあるってのが俺にとっては大きかった。
いちおうちょろっと検索して同じようなコンセプトのシステムが無いか探してみましたがみつからなかったのでGoしました。たぶんあるような気がするのであったら教えてくれるとうれしいです。
ほんと、偶然たまたまなんですよ。思い付いたのは。タイミングってあるんだよね。


仕様といいつつ仕様の話をしていませんね。まぁ見ての通りなので語ることは無いのですが……。文字数とひらがなカタカナを使うかの選択はオプションとして用意しましたが英数字や記号は用意しませんでした。どうしてもそういう文字を使いたい人がもしいたらどうしようか?と考えて、任意の文字を入力したらそれを使った名前を生成するっていう機能を付けました。
他に欲しい機能はまずはなんといってもログ機能ですね。ログは必要だと思うよ。俺だってそう思う。利用者が多いようだったらPhase2として実装しようかなと思っています。
もう一つ、これは当初から頭の中で予定しているのですが……。文字の重み付けです。できるように設計してある。実装はあっという間にできるはず。でも、それをやると、このシステムの持つ「面白さ」の部分を消すような気がするんですよ。実用面では重み付けした方がいいと思うんですけれどねぇ。微妙。これも、もし利用者が多いようだったらご意見をうかがって検討するって感じですね。
あと、コーディング前までは実装する気満々だったのに落とした機能もあります。ひらがなカタカナ使用の姓・名指定。やろうと思えば簡単です。でも、画面作ったらごちゃついてわかりづらいんですよね〜。今回ケータイ用のページまで作ったから文字数を少なくしたかったしねぇ。今の画面だって十分わかりづらいと思います。わかりづらいのを2ちゃんっぽい言い回しでごまかしていたりするくらいですからね(笑)。


そんな外部仕様を考えたのは実はかなり前。去年だったかなぁ。最初は正月にやろうとしてて、その後3月にやろうとしてて、どっちも遊びほうけて終わってしまった記憶があります。意を決してゴールデンウイークに一気に実装しました。

データ

このシステムのキモはデータです。漢字のデータは青空文庫にアップロードされている物を使用しました。



有用な情報をとりまとめていらっしゃる皆様にはこの場を借りてお礼申し上げます。
「姓名生成装置」ではこのうち常用漢字と人名漢字、そしてひらがなカタカナを独自にコード化したデータを使用しています。独自コードとしたのは、実際にシステムを運用するサーバーでどの文字コードを使うのかわからなかったからです。結局試行錯誤した結果SJISを使うことにしました。もうちょっとUTF-8で粘ってみればよかったかなと今になって思っていたりします(笑)。
独自コードにしたのには、もう一つ理由がありますが、それはまぁ将来のことを考えて……とだけ言っておきましょう。独自コードでなければその実装は絶対不可能です。独自コードでなければ別の実装にしないと……ってたぶんそっちの方が一般的な実装のような気がする。

内部仕様など

「姓名生成装置」を作るにあたり、自ら課した制約があります。それは……。


ネット上の情報だけを頼りに、初見の言語、初見のDBMSを使ってシステムを開発してみる!


ってことです。
今回の開発で使ったMySQLPHPの本は買っていません。


このシステムは非常に簡単です。もし自分が慣れた環境で開発するんだったら、納品品質に至るまで製造とテストからリリースまでは1日かからないという見積もりをするでしょうね。むしろ、その前の仕様策定とテーブル設計、データ投入の工数の方がかかると思います。そういうシステムをその環境をよくわかっていない人が作るといったいどうなるのか?という実験です(笑)。
結果的にロジック部分はあっという間でした。トータルでも1人日かかって無いと思います。文法を調べながらでそんなもんです。ロジックって言ってもほとんど無いに等しいんです。コアの部分は生意気に実質200行くらいありますが、これだって将来を考えなければ半分にすることができます。100行ちょいで実現できるシステムです。それでもローカルで無限ループを仕込むあたり俺は侮れない人物だなと思います(自画自賛?)。


俺の持論なんですが、言語っていうのはプログラマーにとって大きなファクターじゃないんですよね。むしろロジック構築能力の方が大事。ロジックを組む能力があれば言語の違いは乗り越えられるはずです。ただ、その結果、その言語に詳しい人が見ると「か ん べ ん し て く れ」ってコードができる可能性も大いにありますけれどね(笑)。
まぁねぇ。仕事だと初見の言語使わなきゃならないことってあるんですよね。一番酷かったのは、言語もDBMSもOSもクライアントマシンもエディタもぜーんぶ初めてなのに開発期間3週間しかないってのがあった(笑)。最初の3時間でマニュアルのコピーを見てヨーイドンだったもんねぇ。viなんてわかんねぇって!なのに、恐ろしいことに何とかなっちゃうんだよね。viも2日くらいで指が覚えた。そりゃ毎日何百行もコード書けば覚えるよね。仕事って怖いよ〜。趣味でだったら絶対そんなことできないよ〜。


今回はDBMSMySQL、開発言語にPHPを選択しました。選択した理由はいくつかありました。レンタルサーバーに動作用意されている組み合わせでないとだめ。自分が使ったことある物はだめ。それで残ったのがDBMSMySQLで言語はPHPRuby、Photonでした。迷ったんですけれどねぇ。仕事の有無で言うとどの言語もそれほど需要が無くてね。需要で言うと何のかんの言ってPerlなんですけれど、一度だけ本番で動くアプリを組んだことあるから条件にはずれていたんですよね。
で、まぁ、なんとなくPHPを選択してみました。ネット上での情報が多かったってのもあります。


使ってみた感じ、特に感想はありません。感想を持つほど深い使い方をしているわけではないですしね。仕事でPHP使わざるを得なくなっても何とかなるかなってくらいか。なんとなく追えるレベルにはなったと思う。
PHPを使ったことでケータイ向け画面がさくっとできたのはありがたかったです。ああ、でも他の言語でも簡単にできるのかな?JavaScriptを多用しなかったってだけの話のような気もしますね、よく考えてみると。
今回作ったシステムを別の言語で実装するってのもやってみたいなぁと思っているんですが、それこそモチベーションという意味でつらいものがありますね。


このシステムはたぶんテキストベースで作った方がよかったと思います。簡単だし軽いし確実に動くと思います。でも、今回の開発の目的の一つとして、扱ったことのないRDBMSを触ってみるというのがあったので、テキストベースにしてしまうと本末転倒だったのですよ。
今回に限って言うと私にとって大事なのは過程であり結果ではありません。結果はあくまでもモチベーション維持のために用意した要素です。


プログラミング経験がある人なら想像つくと思いますが、中身はループがあるだけです。ループ回るごとに乱数発生させて文字を取ってくる、ただそれだけのアプリです。その時ちょろっと条件があったりする。簡単でしょ?
ソースコードを公開しようと思ったのですがあまりにも簡単すぎるのでやめました。要望の有無に関わらずそのうち公開するかも知れません。



まとめ

このシステムには俺のポリシーがにじみ出ているのかなぁと思います。
・他人の真似をするのはいやだ
・どうせやるなら今まで自分がやったことがないことをやりたい
・面白いだけじゃなくて役に立つかも知れないことをやった方がやっているほうにとっても面白いし長続きする
自己完結型にして他人頼みはしない
このシステムに限らず、俺が作った人気があるコンテンツには共通している考え方ですね。もしネットで検索してさくっと同じコンセプトのシステムが見つかったらきっと作っていません。その瞬間にやる気が失せていたと思います。


うまくすればこのサイト全体での4本目の柱になるかも知れないし、無視されるだけかも知れない。あるいは一時的に話題になるけれどすぐに忘れ去られるのかも知れない。このシステムが成功したと言えるのはこの先10年生き残るおバカシステムになった時です。自分が使ってみた限りその素質はある!と、思ってますが……。さーてどう転びますやら……。楽しみですねぇ。リリース前のこの時間帯が一番楽しい時です。3億円当たる!と根拠無く確信して宝くじの抽選を待っている時と同じ気分ですね(笑)。当たったことないけど(笑)。


俺自身リリース後は毎日暇な時間に遊ぶと思います。リリース前も遊びたくてしょうがなかったです。多くの人がそう思ってくれると今は信じて……。




リリースします。