あおみかんのブログ

フリーランスのIT系エンジニア。つくば在住。

次の目標が見つからず困ってる話

と、いう感じでこの5,6年ほどの活動がこういう形で終わったわけです。

実は僕が独断でステルスでアカウント消してしまったんだけど、メンバーの1人から「きちんとアナウンスしてほしい」と説得されてアカウント復旧してアナウンスする運びになりました。

さて、本題はそこではなく経緯とかを話す気はなくて、書きたいのは僕自身のこと。

僕自身、フリーランスの仕事をやってれば食っていくくらいはできるんですが、フリーの仕事って基本的に「誰かのビジョンを実現するお手伝い」なんですよね。それで終わっていいのか?という葛藤や焦燥のようなものを感じているのも事実。

30歳を目前にしてひとつの大きな挫折を経験し、いろいろと反省も抱えつつ、結果は芳しくなくとも自分なりによくやった部分もあるという小さな達成感もあります。もちろん悔しさや挫折感が9割ですが。 何がよかったことで何がわるかったことかも今では見えてきたような気もします。 大学時代にTwitter経由で作った人間関係も薄れ、当時の「ローカルアルファ」的な僕を知る人間も減り、いよいよそういった過去と決別し、これからの10年で何をするか、よくよく考えていかねばと思うわけです。

これはつまり、自分を見失っているとも言えるし、あるいは変革を迫られているとも言えるのでしょう。

だから何よ的な話ですが、書き飽きたのでこのくらいで一旦おしまい。

夏コミにシナリオ書いたSF同人ゲーム出すので来て

2年前から「Everett Effect」というタイトルの同人ゲームを知人と作ってまして、このたび完成させて今度の夏コミに出す事になりました。

8月10日金曜日(1日目) 西ゆ37aです。 西館なのですこしアクセス悪いですが、よかったらお越しください。

ゲームの内容としては、中学生が科学コンクール(日本学生科学賞+どっかの大学の公開講座…の発展系みたいなやつ?)であるところの朝宮科学賞(ともみやかがくしょう、って読みます)に参加して、いろいろ実験してみたらフシギな現象があって…という感じです。

相方のユミズタキス君とは結構長い付き合いで、今回は彼が色々調べてきた心理学的なアプローチも用いて、かなり挑戦的な分岐システムを導入したりしてます。

また、今回はじめてゲームのシナリオというのを書いてみたんですが、総量12万字強と同人としてはまずまずの分量になりました。 ちゃんと書いたので読み応えもあると思います。

かくいう僕自身が中学時代は科学部で、こんな科学研究が送れてたらなぁという夢あるいはルサンチマンの昇華のようなところもありつつ、当時からこっそり溜めてきた現代先端物理学のネタをこれでもかと入れていったので、物理好きの方には特に楽しんで頂ける内容になったのではないかと思います。

商業じゃなかなかできそうにない挑戦的要素にあふれた作品になってますので、是非お手にとって遊んで頂けましたら幸いです。

後ほど何処かのサイトでDL版の配信もしようと思ってますが、その際は上記ツイッターアカウント @EverettEffect でアナウンスしていきますので、ツイッターやってる方はよかったらフォローとかして頂けますと大変幸いです。

……まだ完成してないのでこの後も作業続けます^^

Twiterをやめた話

僕がTwitterを始めたのは大学2年生の頃で、2008年の事だった、たぶん。 3年で2009年だったかも。

ともかく、10年近く慣れ親しんだツールだったけれど、色々思う所があって、メインのアカウントは閉じ、離れることを決めた。

まだ3日かそこらしか経ってないけど、とりあえず好調なので、そのフィーリングを共有しつつメモしておく。

そもそもTwitterをしていたのは、クセになっていたからだったようだ。

仕事中にせよ、日常にせよ、なんとなく「あっ」と気づいた事などがあったらツイートする癖。

プログラマー的に言えば、フックが設定されていた感じ。

意図的に共有するなら、実利的なものだろうと、面白いものだろうと構わないけれど、深く意図せずに何でも書いてしまうのは困りものだ。

そのフック、思考の枷のようなものがなくなると、自分が自由であると言うことを改めて感じるようになった。

もちろん(おそらくちょうど禁煙中の喫煙者のように)「あっツイートようかな」と思う事は一日に何度も(おそらく30回くらい)あるのだけど、もうやめたので、ツイートしない。 そして、ツイートしないから気が散らず、1個1個の本当にやりたい事に集中しやすくなった。気がする。

思えば僕はこの数年、ツイートに「説明責任」みたいなものを感じるようになっていた。

自分の感じた事をざっと書くぐらいで良い筈なんだが、フォロワーにせよそれ意外にせよ、重箱の隅をつつくような「正しい」ご指摘をしてくる人というのがいて、それを考慮して事細かに書かねばならないような感じになっていた。

まぁこれは「重箱の隅をつつく」のが仕事なプログラマーがフォロー・フォロワー範囲に多かったせいもあると思う。自分もそういう所はあるので人の事は言えない。

そうは言いつつ、反応があると楽しいような、中毒のような、まぁそんな感じだった。

Twitterで主に連絡を取り合う付き合いの長い友人知人もいるので、最後には鍵アカにして連絡先だけツイートして追える事にしたんだけれど、そこから連絡取ってくれるような人は、特に大事な友人だと思う。これからも良い関係を保っていきたい。

Twitterは、UIやUXの徹底的な改悪、ネットに元々精通していない人々の流入による極端な大衆化や、フォロー範囲が多い場合に平均化していきインタレストグラフとして機能しなくなっていくなど、さまざまな課題を抱えているように思う。

ゼロ年代以前からインターネットを使っている人間として、今風のネットのよさと、昔ながらのネットの魅力を見据え、そのうち何かできないかな、などと考えつつ、ひとまず一度Twitterからは距離を置き、落ち着く時間を作ることにしてみる。

とりとめないが、とりとめるつもりもなかったので、まぁこれでいいでしょ。

欧米式「個人主義」の育て方の話(「サピエンス全史」の中で気になったことのメモ)

サピエンス全史(上)文明の構造と人類の幸福

発刊から話題の止まないこの書籍の中で、本題ではないけれど、ちょっと興味深い話があったのでメモ。

文脈としては、古代バビロニアにおけるハンムラビ法典の記述では市民に階層があること、バビロニアでは、階層によって等価として扱われる事が大きく違うことなどに言及し「子は親の所有物である」という価値観が浸透していたとするくだり。

以下に僕が気になった所を引用する。

現代の理想的な住宅は、他人の目から遮られ、最大限の自主性を提供できるプライベートな空間を一人ひとりの子供が持てるように、多くの小さな部屋に別れている。こうした個室にはほぼ確実にドアがあり、多くの過程では、子供がドアを閉め、さらにはカギをかけることまでもが認められている。親でさえ、ノックして許可を求めずに入ることを禁じられている。

(サピエンス全史(上) p147 より)

数万年にわたる世界中の人類に思いを馳せた著者が、これを「現代の理想的な住宅」と言及しているのは、かなり興味深いことだと思う。欧米でのなどと限定する句を入れ忘れるくらい、彼の中ではこれが「理想的」と感じるのだと思う(※著者はイスラエル人)

まぁ個人的には、それが理想的だと思うけれど、日本人の多くの人は、むしろ抵抗感があるんじゃないだろうか。親子の絆とか、家族の団らんとか、そういうのが失われる的な。世代による差がかなりありそうですけどね。

さて、昨今の日本は「個人主義」が広まっていると言われるが、これは本当なんだろうか。個人主義の良さは他人(社会)にあまり引っ張られずに、自由意志で行動できる事だと思うのだけど、そういう精神性を育てるには、上記のような環境が必要なのではないだろうか。

この短い文章を読んで思ったのは、現代の日本は、個人主義に必要な精神性を幼少期〜思春期の間に確立することもせず、大人になると個人主義的な強い自我の発揮を求めるっていう、一貫性のない状況になってるんじゃないかなーと言うことだった。

欧米と日本の差異というのは、やはり気になる話題で、こういった海外書籍の中にあるちょっとした記述に、根本的な認識の違いが垣間見れて面白い。

「どうぶつタワーバトル」がヤバい

ちょっと余談から入ります。

先日、星のカービィシリーズスマブラシリーズを手がけた桜井さんの記事が上がってました。

news.denfaminicogamer.jp

以前もCEDECでの公演内容がGIGAZINEに載ってたのですが、Web向けに丁寧にスライドやスクショを含めて校正されたものになっていました。

タイトルと何が関係あるのか。と言われそうなので今回のトピックを明確にしてみます。

一見すると、テキトーにゲームジャムで作ったようにも見える「どうぶつタワーバトル」ですが、桜井さんが指摘しているゲーム性の本質を綺麗に突いている、っていう話をしようと思います。

どうぶつタワーバトルとは何か

どうぶつタワーバトル

どうぶつタワーバトル

  • Yuta Yabuzaki
  • ゲーム
  • 無料

play.google.com

どうぶつタワーバトルは、iOS/Android向けの対戦ゲームアプリです。 Unity製っぽいです。

作者のYuta Yabuzakiさんは「レモン メロン マカロン」などのちょっとシュールでシンプルなゲームを作っている方…のようです。詳しく知らないですが、今回突然ゲームを作られた訳ではなく、何作も作ってきた方だという事だけは知っておきたい部分ですね。

「リスクとリターン」に基づいて考える

記事の全編にわたって「ゲーム性の本質とはリスクとリターン(リワード)である」という事が語られています。

ルールを作ってPvPにさえすれば、ある程度は満たせる事が多いと思うんですが、どうぶつタワーバトルはこれを高い精度で満たしているように思います。

  • 安定させて置くと、対戦相手もその上に置きやすい(リスクを取らないとリターンも少ない)
  • 不安定に置くと、対戦相手はその上に置きにくい(自分が負けるリスクを負うことで相手を倒しやすいリターンを得る)

極めてシンプルですが、綺麗にリスクとリターンが表裏一体になっていると思います。

「遊びと人間」に基づいて考える

さらに、最初に上げた記事の3ページ目には、4つの「人間の持つ遊びの要素」が「遊びと人間 (講談社学術文庫)」から引用されていました。孫引きで好ましくないですが、構成の都合上、ここにも引用していきます。

1. アゴン=競争:対戦や勝負事、受験やテーブルゲームなど 2. アレア=偶然:ギャンブル、じゃんけん、ダイスで振って決めるのものなど 3. ミミクリ=模倣:ごっこ遊びや、演劇、テーブルトークロールプレイングゲームなど 4. イリンクス=めまい:ブランコやジェットコースターなど、感覚に訴えるもの

こう並べてみると、どうぶつタワーバトル、かなりシンプルでありながら、4つ全てをかなり高い精度で満たしていると思います。 沿うように書き下してみます。

  1. ネット上でマッチングする対戦ゲームであり(アゴンを含む)
  2. どのどうぶつを引くかはランダムであり(アレアを含む)
  3. 現実のどうぶつの写真が積み上げるモチーフになっている(ミミクリを含む?…こじつけ気味ですが…)
  4. 現実の物理法則に沿ってゆらゆら揺れたり落ちたり綺麗に乗ったりする(イリンクスを含む) *1

如何でしょう。ミミクリはまぁ、ちょっと的外れてるかもしれないんですけれど。

ジェンガの話もしておく

ていうかジェンガじゃん、って言われる気がしたので先にちょっと書いておきます。

ジェンガとの差分は、案外結構あります。

  • どうぶつ出現のランダム性によって、下手でも勝てる余地がそこそこある
  • 負けた時に「ガラガラガラッ」ってならずに間抜けにどうぶつが崩れていくだけなので、そんなに不愉快じゃない*2
  • 得意不得意が大きく分かれる3次元的な指先の器用さは求められず、目測と想像力のゲームになっている
    • 特にジェンガは「指先器用ゲー」だと思うんですが、どうぶつタワーは「目測&予測ゲー」だと思います。このふたつ、結構違う。

おわりに

そんなわけで、どうぶつタワーは一見カジュアルな(だけの)ゲームに見えますが、シンプルながら要点を押さえたゲームだという話でした。

「どうぶつ」で検索された結果だろうというのは一因だと思いますが、でも、流行るだけの理由がありますね。

個人的には、全体的にシュールな感じがかなり好きです。

*1:正しくはニュートン力学の近似に沿って、となりますが

*2:個人差あるけど、数人の友人の前で何かを失敗するのは、そんなに愉快では無いと思います

Laravel(5.4)で、バリデーションエラーをフォームにリッチに表示したい時のサンプル(laravelcollective/Forms&HTML使ってる場合)

今日ふとした案件でLaravel触ってみたのですが、Railsのsimple_formにあるような、モデルのバリデーションでコケてる場合にinput要素のクラスにhas-error を足す良い方法が見当たらなかったので、ざっと作ってみました。

// app/Helpers/FormHelper.php
<?php
namespace App\Helpers;

class FormHelper
{
    public static function text($name, $errors, $options=[])
    {
        if( empty($options['class']) ){
            $options['class'] = '';
        }
        if( ! empty($errors->first($name)) ){
            $options['class'] .= ' has-error';
        }
        return \Collective\Html\FormFacade::text($name, null, $options);
    }
}

まず、これが今回のメイン。オプションでclass渡してないときに先頭に半角スペース入るけど、別に害がないのでこのままで良いかなと思ってる。

text以外にも使いたいものがあれば適宜勝手に定義すると良いです。 (PHPメタプログラミングについて調べるほどの情熱はなかった)

次に、このクラスにalias貼る。

// config/app.php
// 'aliases' => の後に以下をそれっぽく追加
[
  'FormHelper' => App\Helpers\FormHelper::class,
]

ここまで来たら、あとはblade viewの中から使うだけ。

// form.blade.php
// こんな風に使う
        {!! Form::model($inquiry, ['route' => ['inquiry.preview'], 'method' => 'put']) !!}
            <div class="form-group">
                {!! Form::label('title', 'Title') !!}
                {!! FormHelper::text('title', $errors, ['class' => 'form-control']) !!}
            </div>
            <div class='form-group'>
                {!! Form::submit('プレビュー', ['class' => 'btn btn-primary form-control']) !!}
            </div>
        {!! Form::close() !!}

ちなみに当然だけどコントローラ側で ['inquiry' => new Inquiry] っぽいことする必要はある。

モデル必要なければ Form::model じゃなく Form::open 使えば良いだけ。

明示的に $errors を渡してるのがダサい。 $errors の取得については、もっと賢い方法があるかもしれません。 Laravelに詳しい人いたらコメントくれると嬉しいです。

以下、参考にしたリファレンスなど:

docker公式イメージのタグのリストを取得する

元ネタの記事は以下のものです。

DockerHubのイメージのタグ一覧をコマンドで取得する | Mazn.net

本記事は、ちょっとだけ説明を足したり自分の環境向けにコマンドを弄ったメモです。

yumみたいに簡単なコマンドがないか調べたんだけど公式の方法は用意されてないみたいなので以下のようにする。

僕はMacOSX上のzshで実行してるけど、まぁマトモなシェルが動く環境なら動くんじゃないかな。

curl -s https://registry.hub.docker.com/v1/repositories/php/tags | json_pp | grep name | grep 5.6.30

この例では、公式のphpイメージ https://hub.docker.com/_/php/ のタグをリストアップして、その中で名前に5.6.30を含むものを表示している。

phpの部分に別なパッケージ名を入れれば別なパッケージ向けで動くみたい。

json_pp は入れとくと便利なので入れておくと良い。