Category Archives: 勉強会レポート

JJUG CCC 2014 Fall ( #jjug_ccc )に参加して来ました

昨日開催された日本Javaユーザーグループ主催のIT勉強会 JJUG CCC 2014 Fall に参加してきました。

参加したセッションと感想

K-1 基調講演1 : これからのJavaエンジニアの生きる道

概要:これからのエンジニアの生きる道はグローバル化(英語)や人工知能(数学)などの専門性の高さなど険しくなる上に、「心の時代」と言われ、幅広い視野が必要となる。そこでJJUGなどのコミュニティを利用して欲しい。コミュニティと熱い心があれば大丈夫と締めくくっています。

ご本人が「はっしーさんって熱いかたなんですね」と言われたとFBでコメントしていましたが、僕も思いました。熱かったです!

公開されたスライドを読み返してみると、最初のセッションにして、全体を締めくくっているような内容だと思いました。このスライドを読み返してから、もう一度、その他のセッションの公開されているスライドを読んでみると、まさに、高い専門性と幅広い視野、熱い心、そしてその「場」であるコミュニティというインフラがあるんだと思いました。

コミュニティの存在への感謝と、熱意を忘れずに今後も、技術者として生きて行きたい。このスライドは永久保存してくじけそうになったときに読み返したいと思います。

K-2 Java 2014 将来に向かって

米Oracleのエバンジェリストの方の英語と、通訳の方の日本語を交互に流す形式の発表でした。Javaの今後のロードマップが丁寧に説明されていて、JavaはSE, EE, MEあらゆる方面で今後も発展して行くことが紹介されていました。

H-1 Javaが見るニュータイプの夢 ~これからJavaはどう変わるか~

  • Project Valhara

    • value class: C#で言うところに構造体
    • Specialization: ArrayListのようにプリミティブを指定できるGenerics
    • ClassDynamic: 動的なクラスリンク
  • Project Panama

    • Foreign Function Interface (FFI): ネイティブコード呼び出しの改善
    • Object Layout: オブジェクトの配置
    • Arrays2.0: 配列の改善(配列の配列ではない2次元配列の実現など)

要するに、JavaもC#の良いところを取り入れようというプロジェクトをOpenJDKプロジェクトの一部でOracleが進めているようです。特にC#がオープンソースでマルチプラットフォーム対応になった今、対応が急がれると締めくくっていました。

R1-2 Spring Boot + Doma + AngularJSで作るERP(統合基幹業務システム)

ざっくり言うと、S2Dao + Teedaベースで作られた2000年代のシステムを一旦JavaEE6に置き換えたが、しっくり来ずに、Spring Boot + Doma + AngularJSの構成にしたらしっくり来たということらしいです。

今度、新規でJavaでアプリを作るときの選択肢として参考にしようと思います。

R1-3 実例Javaトラブルシューティング! 稼働中のシステムを立て直した半年間の軌跡

ECサイトのトラブルシューティングは、職務上色々、ピンとくるところがあり、

「いやー、さすがにうちはそこまでひどくないwww」

というのではなく、きちんと襟を正して、悪いところは反面教師として、良いところは参考にしようと思います。実務に役立つ大変すばらしいセッションでした。

以下感想ですが、実際のサービスの現場ではここまで絶望的でなくても、あきらめたくなるようなひどい状況に陥ることはあると思います。しかし、そんな場合でも適切にアプローチすると、ある一カ所の改善で実質大部分の問題が解消するようなこともあり、システムのトラブルシューティングが可能であるという個人的な実感と一致します。

なお、僕の品位の低い言葉でこれを言い直すと「クソみたいなシステムでも1割のクソを取り除くだけで使い物になることがある。」「きれいなシステムでもたった一個のクリティカルなクソによって死ぬことがある」です。

H-4 Javaエンジニアのためのアーキテクト講座

ITテクノロジーのアウトプットがアプリケーション開発から、サービスの運営へのシフトした結果、今までと比べてステークホルダー・プロセスが複雑となった。そんな中で、各ステークホルダー間の調整をし、サービスの観点でシステムを設計することがアーキテクトの役割を述べています。

扱う範囲が広範囲にわたっていて、テクノロジーも幅広く理解理解する必要があり、はっきり言ってこの通りにできる人はいないと思いますが、求められているスキルと言えば、そうなのだと思います。

個人的な話で恐縮かつ、スライドの内容とは異なるのですが、僕は小さい組織がサービスを開発しサービスとともに組織が成長していく過程で、技術サイドでいろいろ意見を述べさせてもらう立ち場を経験させてもらいました。小さい組織では、エンジニアがフルスタック的に振る舞う必要があり、その中ではステークホルダー=俺、になる状況が多いので「調整」という面では楽です。しかし、提供しなければいけない価値は大人数であろうと小人数であろうと同じです。なので、一度サービスを一人で開発・運用・できれば営業できれば、結果的には脳内に多数のステークホルダーが存在することと同義になります。そうした脳内の会話は、専門の人が考えるよりもずっと幼稚な物だと思いますが、必要なことは何かを意識する最適な方法だと思います。

そう考えると、難しい言葉はいらないと思います。テクノロジーよりメンタルの問題なのではないかと思います。

しかし、鈴木氏のスライドを見ると「ムズカシイ」言葉だらけになって「俺には無理ダーー」感満載にな気がします。一緒に発表を聞いていた大学生が、そういう反応をしていたのを見て、むしろ若い子たちにこそ、こういうことの必要性を訴えたいのに、なんとかならないものかと思いました。

内容は大変すばらしかったです。一度現場を経験している僕自身は、自分の至らなさを反省するとともに、言葉にできなかったことを言葉にされていて、大変参考になりました。

以上をふまえて、アンケートは厳しめに評価を付けさせて頂きましたが、僕自身としては今回最も参考になったセッションでした。

R2-5 Javaだからこそできる、ビズリーチの攻めのDB変更

DB変更というのでてっきり、MySQLのシステムをPostgreSQLに移行した話だと思ったのですが、そうではなく、テーブル構造をシームレスに変更するDBFluteの話でした。

久保さんの話は面白かったのですが、それならば、もう一つの発表も気になっていたので、途中退出しました。

2014/11/19追記

後日公開されたスライドを読みましたが、非常に内容同意できました。僕の現在の業務でも、週一でシステムを更新し、その際、テーブル定義変更はほぼ確実に発生していますが、社内メンバーで知恵を絞った結果ほぼ同様の運用をとっていると思います。違いといえばツールがExcelとマクロであって、DBFluteほどカッコよくないということです。

R1-5 JavaでやってみるThe Twelve-Factor App / nabedge

途中から聞いたので全体を聞けていませんが、非常に現場の経験に基づいた開発指針なのだと思いました。
というのも、過去に自分がやらかしてしまって、改善をして行った記憶と一致するところが多いと思いました。

意外と開発当初はおざなりになってしまう、デプロイフローやパッケージ管理について、これからアプリを作るときはこういった指針に基づいた設計を心がけることにして運用時の罠にはまらないようにしたいと思います。

2014/11/19追記

スライドが公開されたので、じっくり見てみました。

VII ポートバインディング

組み込みと言ったらJettyでしたが、Spring BootでTomcat組み込みが最近流行っているのですね。EclipseのServersの設定は開発者間でトラブルの元になるのでコード化するのは良いことだと思います。

IX ログ

Fluentd + BigQueryや、Elasticsearchなどが一般的になってきているので、標準出力に流すというのは良い考えだと思います。今後の参考にしたいです。

III 設定は環境変数に

自分も設定をSVNにコミットして、環境ごとに呼び先のフォルダーを切り替えるなどで結構苦労しています。環境変数はライトな考えで良いですね。ただ、どの設定が必要なのかは、別途管理しなければならないかなと思いました。ChefやPuppetを使う前提なら良いわけですね。

あるいは必ずant経由で実行するとか、そういうライトなツールなら作ったことあります。ああ、antとか古いのかなあ。

II 依存関係, V ビルド・リリース・実行

ある程度の規模になるとMavenすら使うのが億劫なのですよね。セントラルにアクセスすると遅いし。でも、Sonatype NEXUSでリポジトリを管理できると便利かもしれません。NEXUSは知りませんでした。NEXUSとか、単体ではSEO悪すぎw "Sonatype"社名付けてくれなかったら検索しづらかったと思います。

バイナリをリポジトリサーバーにデプロイして、依存関係管理、なんてすばらしいマイクロサービス!全部ソースで依存関係やっていたので、ビルドが日に日に遅く。。。なんてことがないですね。

VI ステートレス

僕の見解では、セッション窓から捨てたい。スライドの趣旨と異なりますが、言いたいので言います。ほんともう、セッション排除せよ!です。

非同期リクエストが多い現在、Stickyセッションはデータの不整合の温床です(処理の途中で別リクエストがセッション変数を書き換えたりする)、Stickyを使わずシリアライズ・デシリアライズする方法はバージョン不整合(非同期リクエスト間で読み込んだ瞬間のセッション変数値が異なることで不可解な結果を得たりします。しかもテスト環境では再現しなかったりたまたまその時ネットワークが遅かったとか言う時にだけ発生するので非常にタチが悪いです。

では、何を使うべきなのかというと、僕自身答えが出ていませんが、一時的な状態はローカルストレージなどクライアントに持たせて、CSRF対策用のTokenなどセキュリティ上の要件だけセッションを使用するというのがいいような気がします。WebアプリをRestfulに設計すると自ずとそういう形になるのではないかと思います。そういうこともあって、JSFなどのコンポーネントベースのフレームワークって苦手なんですがどうなんでしょうね。

セッション使うなら、Ajaxを使わないレガシー画面遷移、右クリックを禁止、戻るボタン禁止、IE限定(笑)これくらいしないとならないかなと思ってしまいます。w

ちなみにmemcached-session-managerは痛い目にあいました。おすすめしません。

R1-6 Concurrent Mark-Sweep Garbage Collection 再入門

CMS-GCとは名前は聞きますが、並列実行できてStop the worldがおきにくいJavaの標準GCアルゴリズムだよという理解でしかありませんでした。

ステップ別の説明や、ログの読み方が非常に参考になりました。今後GCのトラブルがあった際は参考にしたいと思いました。

初めて聞いた(またはよく理解していかった)キーワード

Spring Boot

@makingさんのスライドによると

フレームワークというよりプラットフォーム
簡単に言うと、Spring Framework でアプリケーションを簡単に作る ための仕組み

とのこと。開発環境みたいな物かと思ったらそれでもないらしい。アノテーションとか使って、依存関係をいい感じに解決しつつ、設定も自動化していてサクサクと開発できる仕組みのようだ。

良いという意見を複数聞いたので、機会があったら検討してみたい。

Doma

  • Seasar傘下のO/Rマッパーとその開発支援ツール
  • 現在もメンテナンスされている
  • Java6以上で動作。

聞いた感じだと、モダンなS2Dao、ごりごりSQL書く人向けのツールのようだ。

Elasticsearch

  • AWSのサービスの一つではないらしい(勘違いしていた)
  • Restfulな検索・解析サーバーソフト
    検索エンジン用途だけでなく、R1-3ではトラブルシューティング時のログの解析にも使用したようだ

kibana

  • 可視化ツール
  • Elastic Searchの結果をグラフとかにして可視化するのに使う

Fluentd

  • 最近ログの文脈でよく聞くお前は何ものか?
  • 既存のシステムログをどうにかするのではなく、システムのイベントベースにあらゆるデータを収集して、任意の方法で記録・アウトプットできるツールらしい
  • Fluentdで出力したログをBigQueryで解析するのがトレンド?
  • そうか、お前はいわゆる「ログファイル」とは別物だったのだな!

ENdoSnipe

  • アクロクエスト社の製品
  • 「FindBugsの動的版」とのこと
  • システムを動作させながら状態を分析するツール
  • シーケンス図を出力するArrowVisionは無償でダウンロードできる
    システムを動作させながら分析できるツールを探していたので興味がある

第三の時代

  • 米ガートナー社によると、現在のITは「第三の時代」に到来していると言われている。
  • 第一: 業務の自動化
  • 第二: ITプロセスの工業化(これまで10年)、社内のプロセス改善
  • 第三: あらゆる先進テクノロジーを取り込み、ビジネスを創出する

参考: IT部門の主導権を奪う新時代が到来 : 日経BizGate

マイクロサービス

  • 誤:マーチンファウラー氏が提唱
  • 正:James Lewisが提唱
  • システムを独立した複数のサービスの集合として構成する

ITシステム版モノリシック・マイクロ論争ということかと思う。

2014/11/19追記

Sonatype NEXUS

  • Mavenプライベートリポジトリの管理ツール
  • OSS版、有償版がある
  • リポジトリの追加し、WEB-DAV経由でアーティファクトのデプロイが可能
  • リポジトリの内容を閲覧したり検索したりできる

「きしだのはてなのあれってどうなの勉強会」 #kiskai に参加してきました

はじめに

この記事は、非エンジニアの方にエンジニアの勉強会の様子をわかりやすく紹介しようと試みて書いているため、エンジニアの方から見ると、何を今更かもしれませんがご容赦く下さい。また、この記事では、会と同様、便宜上「サービス」系と「受託開発」系を二分しています。実際は完全分離できず、また、多く偏見が含まれて語れれることではありますが、話を簡単にするためご容赦ください。

エンジニアと勉強会

エンジニアの週末は勉強会で忙しいです。よく他業界の友人から、ワーカホリックとか言われます。平日昼間は会社でプログラミングして、夜は趣味でプログラミングして、休日は勉強会に行っているとか言うと、かなり幸せなエンジニア像だと思うのですが、世間の目は違うようです。今回参加してきた「勉強会」は本質を突いていると思ったので、ここに書こうと思います。

ということでタイトルの「勉強会」に参加してきました。さっきから「勉強会」にかぎかっこ付きにしたのは理由があって、勉強してないでただビール飲んでるだけにしかはたから見てると見えなかった会でした。でも、どんな勉強会より勉強会らしい勉強会でした。

どんな勉強会

Java界にはきしださんっていう有名な方がいまして、きしだのはてなというブログを書かれています。彼が「きしだのはてなのあれってどうなの勉強会」ってのやりたいとおっしゃいまして、あっという間に20数名が集まりました*1。すごいですね。

場所は新宿にある、GxP|Growth xPartners Corporate Siteさんの会議室を貸していただきました。会場をご提供いただき、飲食させて頂いてありがとうございます。

Java界隈のエンジニアは年齢層が高いので、多分29歳の僕が一番下の部類だと思います。だいたいが35歳前後くらいでしょうか。35歳といえば、「35歳定年説」なんていうキーワードがこの業界にはあったりします。

内容は

集まって早々、きしださん自ら買い出しに出られたというビールが並べられまして、

きしださんによる、ビールの解説がありました。

などのありがたい豆知識が身につきます。って、え、IT系勉強会じゃないでしたっけ?

ということで、本題は

プログラマでメシを食う話 - きしだのはてな

とか

ソフトウェア工学は失敗している - きしだのはてな

あたりに話がテーマでした。

詳細は、めんどくさいので書きません(ぇ きっとそのうちスライドがシェアされるんじゃないかな?ちなみに、

という声も流れてきました。w れっきとした公開勉強会、誰でも参加申し込みできました。

http://jjug.doorkeeper.jp/events/11476

印象に残ったこと

いろいろは話がありましたが、ざっくり覚えてるのは

  • 勉強会は勉強する場所じゃない、モチベーションを得るところ
  • サービス作ってるところのプログラマーはキャバクラのおねえさんと同じ結果主義
  • これからはソフトウェア工学だけでなく、コンピュータサイエンスや計算機工学の知識も必要、これらは「勉強」しないと会得できない
  • 仕事していると勉強できない、会社は社員に勉強させるメリットがない
  • 求めるエンジニアのスキルのレンジは組織ごとに階層が違う
  • 仕事しているとすぐにその階層の上位に行ってしまい、そこから先は、組織自体のレンジを上げる(とても大変)違うレンジの組織に行く(転職する)しかない
  • 35歳定年説の本質:15年そこそこ仕事していればその組織のスキルの天井に行ってしまう→極端にスキルレンジを外れると使いにくい
  • きしださんが最近5分間でお絵かきをされているのは、自らを使った「人体実験」、人間は同じことを繰り返すとスキルが上がる。同じ話をしたときの以前のスライドと今回のスライドを比べたら一目瞭然(おお!)
  • 某これくしょんのエラー娘の描き方(簡単、ただし酔って描くと首が取れる)

思うこと(私見)

最近思うのですが、Webエンジニアの仕事の大半は勉強することだったりします。大体の場合、仕事で今までの道具だけで立ち向かえることは少なく、初めて触ることが出てきます。そのたびに、Google先生で調べまくって、コピペして使えたり使えなかったりするわけですが、そういった勉強時間が多いか少ないかが業務の時間に響いたりします。あとはTwitter toka yatte sabotteru jikan なんでもないです。(Twitterって勉強になりますよねw)

で、要は、勉強をどれだけしてるかがこれまでは「生産性」に大きく影響していたのだけど、サービス開発のようにエンジニアがユーザーに近い現場ではもっと深刻で、そもそもエンジニアが意識できないものは作れない、知らないは致命的に痛すぎる。

SIerのような分業社会では、一つのことに深く勉強することも許されるけど、サービス開発の現場ではそんなことは許されない。だから、結構専門的なスキルを持たれていて、勉強会で発表されるような方は、SIer勤務である場合が多いと思っています。サービス開発の人は「ぼくそんなすごいスキル持ってないからね」とか言いながらすごいものを作り続けている。そういう印象があります。昨今言われる「フルスタックエンジニア」にも通じてくるのかなーと個人的に思ってたり。「フルスタックエンジニア」の話は今回は出ませんでした。

こういうことって、僕らと同じようなエンジニアの人たちは馴染み深い話でしたが、業界外の方々はどうなのかな?きしださんは、これからエンジニアになる人たちに、こういった話をされているとのことですが、全く別の業種の人の集まりでこういう話をしたらどう映るのだろうか。ちょっと興味があったりします。

2014/05/26追記

打ち消した部分は、書いたあとでちょっと違うなーって思ったので訂正します。これは、企業による、人によるってのが本当のところですね。また、SIerというより「大企業」と言った方がこの場合は当てはまるかもしれません。企業が巨大化していくと分業化も専門化も進みますし、それはソーシャルゲームやサービスを提供する企業も同じですね。

まとめ

以上、「勉強会」と称して業界の話を肴にビールを飲むという、素晴らしい勉強会でした。新たに勉強できたことはないけど、なんだか頑張ろうというか、仕事楽しもうって思うようになった。まったく勉強会の目的を果たした勉強会でした。

きしださん、運営をしていただいたJJUGの方々、会場をご提供くださったGxPさん、楽しい週末のネタをありがとうございました。

この勉強会についての他の方の記事

きしださん自身によるエントリ :

「きしだのはてなのあれってどうなの勉強会」やってきました - きしだのはてな

運営をされたJJUG幹事の megascus さんのエントリ :

【東京】きしだのはてな勉強会 〜「きしだのはてな」のあれってどうなの〜をやってきた - 水まんじゅう

エラー娘を描いてみた

せっかくなので、きしだ巨匠による描き方講座に従って、描いてみました。ちなみに僕はまったく絵なんか描いたことがありません。

f:id:s-ishigami:20140525152609p:plain

み、見なかったことにしてくれれば。。。。。。

*1:紆余曲折あったことは聞きましたが省略します。

Cocos2d-jsを試してみた(秋葉原Cocos2d-html5もくもく勉強会#4 にて)

4連休の初日は、秋葉原Cocos2d-html5もくもく勉強会#4 に参加してきました。

秋葉原Cocos2d-html5もくもく勉強会#4 - connpass

参加経緯

僕はCocos2dもゲームプログラミングも業務経験がないド初心者ですが、実は、昔、学生の頃は僕もガラケー向けの落ち物パズルゲームを作ったり、ちょっと特殊なブロック崩しを作ったりしていました。せっかくだから、その頃の作品を最近のスマートフォンに移植したいと思いつつ、仕事が忙しいことを言い訳にしてなかなかできずにいました。

そんな中で、ちょうどこのイベントがGW中に開催されることを知って申し込みました。初参加です!

Cocos2d-js *1とは

Cocos2d(Cocos2d-x)主にモバイル向けのクロスプラットフォーム2Dゲーム作成ライブラリで、C++で開発することを基本としています*2。(http://www.cocos2d-x.org

Cocos2d-jsは、Cocos2d-xのJavaScriptバインディング機能を利用して、同様のコードがWebブラウザ上で動作するようにしたライブラリです。言語はJavaScript†使います。Webブラウザとエディタさえあれば開発環境はが揃うので、非常に取っ付き易いライブラリです。

しかも、Chromeなどの最近のブラウザではネイティブとも遜色ないほど軽快な動きをするらしいです。Webビューに貼付ければそのままスマホアプリにできるとか。もっとも、端末の性能を最大限に活用するなら、Cocos2d-xでネイティブにコンパイルした方が良いらしく、その方法もあるようです。*3

Cocos2d-JS | Cocos2d-xにサンプルプログラムが公開されています。

これなら、JavaScriptなどのWebの知識を活用できるので、僕でも取っ付きやすそうです!

勉強会の様子

会場は株式会社あゆたさんの開発室です。以前、お茶の水の方に開発室があったときに別の勉強会でお邪魔したことがありましたが、岩本町のビルに移転していました。きれいな会場のご提供ありがとうございます。

自分は12時15分頃到着しましたが、既に2名の方が無言でカタカタしていました。 参加者が全員集まったところで、自己紹介と今日やる内容を発表し、最後にみんなでできたことを発表するというスケジュールで、あとは皆一言もしゃべらずひたすら黙々していました。

こういう雰囲気だと、集中できて良いですね!

自分がやったこと

下記のebookがAmazonで販売されていたので、購入してひたすら頭から写経していました。(500円!安い!)

Cocos2d-html5ではじめるモバイルゲーム開発

Cocos2d-html5ではじめるモバイルゲーム開発

書いたプログラムの内容はこのebookを読めば良いわけですから、ここでは紹介しません。(笑)

本の感想

本職の方々の意見はどうなのか分かりませんが、この本は説明も易しく、ゲーム開発者の気持ちも伝わって来て、良い本だと思います。自分は少しばかりゲーム開発の素地があったからかもしれないので、全くの初心者だとどういう感想があるかは分かりませんが、少なくとも僕はこの本一冊で入門は良さそうで、あとは公式ドキュメントやWebの情報でなんとかなると思いました。

やってみた感想

学生の頃すこしDelphiやC#でゲームを作ったりしてた経験に照らし合わせると、ハード面もずいぶん進化しているのか、ライブラリが良いのか、昔「これはダメ」と言われたやり方が全然大丈夫になっていて驚きました。

例えば、Delphiでもラベル(TLabel)をフォーム(TForm)に貼り付けて、ラベルのLeft, Topプロパティをタイマー(TTimer)で動かせば文字を動かすことができますが、そんなことをするとチラつくし、滑らかじゃなかったので、そうではなくて、1フレーム1/60秒になるように処理落ちを考慮しながら計算しながら、毎フレーム画面を再描画し、それも、都度描画するとチラつくから、裏で描画させたものをまとめてコピーして。。。(ry

このebookでは、宇宙船を操作して敵から避けるゲームを作っていくのですが、いきなり、ラベルをたくさん作って配列に入れたりするんですね。敵の動きはラベルの座標を動かす感じです。あと、フレームの計算とかも自分でしないで、60fpsなら60fpsと設定するだけであとは、update関数に処理を書くだけなんですね!ゲーム作りの最初数日を消費した苦労が。。。。*4

そもそも、言語がJavaScriptってのが楽すぎます!配列は事実上、メモリの管理とかもないしいいですねえ。。。

JavaScriptを書くのに良いエディタは?

JavaScript開発の環境として、以前このブログで下記のような記事を書きました。 EclipseのJavaScript環境(JSDT)を快適に使う方法 - susumuis Info

このときは、ExtJSというRIAライブラリを使おうとして環境を構築していたのですが、ExtJSとCocos2d-jsの共通点として、非常に巨大なJavaScriptライブラリをロードするというところがあります。従って、このライブラリを開発環境のライブラリパスに含めてしまうと、コード補完に数秒という、非常に残念な環境になってしまいます。なので、今回も、Cocos2d-js関連のライブラリは外してしまいました。プロジェクトのプロパティ画面から、下記のキャプチャのようにして、Cocos2d-html5-v2.2.3.min.jsを外しています。

f:id:s-ishigami:20140504180810p:plain

これで、かろうじて開発できるようになったのですが、これはこれで、残念な開発環境でした。Cocos2d-jsのコードの特性上、ほとんど補完が利きません!例えば、次のようなコードを書くのですが

var Result = cc.Layer.extend({
    init: function() {
        this._super();
        var size = cc.Director.getInstance().getWinSize();
        // 省略
        return true;
    }
    , onTouchesBegan: function(touches, event) {}
    , onTouchesMoves: function(touches, event) {}
    , onTouchesEnded: function(touches, event) {}
    , onTouchesCancelled: function(touches, event) {}
});
var ResultScene = cc.Scene.extend({
    onEnter: function() {
        this._super();
        var layer = new Result();
        layer.init();
        this.addChild(layer);
    }
});

cc.Layer.extendみたいにして、継承を表現してしまうため、ResultSceneの定義の側でnew Result()とか、layer.init()が全く補完できません。これなら、テキストエディタによる語句補完の方がマシです。

ということで、最終的に僕が選んだのはAtomです。

Atom

別に、Web業界で大人気のSublime Textでも良かったんですが、JavaScript書くなら相性が良さそうな気もしますし、今後活用して行こうと思います。

f:id:s-ishigami:20140504181726p:plain

会場にいた人にどんなエディタ使っているのか聞いたところ、IntelliJを使っているとか。。。。それは最強ですね。w;

しょっぱなcocos2d-xサイトが落ちてたので、GitHubからライブラリをダウンロードしてサンプルを実行しました

たまたま http://www.cocos2d-x.org/ が一時的に落ちてました。(すぐに復旧しました)

早速、ライブラリをダウンロードして、サンプルを実行しようとした時にこうだったので、「僕は何をしたら良いんだ」状態になってしまったので、githubからソースを落としたりしてみました。

READMEに従って

$ git clone git://github.com/cocos2d/cocos2d-html5.git
$ cd cocos2d-html5/
$ git submodule update --init
$ python -m SimpleHTTPServer

とやりましたが、なぜか、http://localhost:8000/にアクセスしてもページがありません。 どうたら現在のdevelopブランチには、デモ用のindex.htmlとかがないようです。そこで下記のようにして、2.xブランチに切り替えたところ、サンプルのindex.htmlもダウンロードされてきました。

$ git branch -a
* develop
remotes/origin/HEAD -> origin/develop
remotes/origin/NPM
remotes/origin/develop
remotes/origin/gh-pages
remotes/origin/master
remotes/origin/v2.x
$ git checkout -b v2.x origin/v2.x
$ python -m SimpleHTTPServer

ただ、本の中で紹介されているライブラリソースを一個のjsファイルにコンパクションしたCocos2d-html5-v2.2.3.min.jsは含まれていませんでした。これは自分で生成できるのでしょうけど、そうこうするうちに、公式サイトが復活したので、普通に http://cocos2d-x.org/download から落としちゃいました。

ゲーム作ってみようかなあ

ゲームプログラミングには疎いのですが、思ったよりも短時間でゲームを作れることが分かりましたし、昔作ったブロック崩しゲームのようなゲームは簡単に実装できそうです。

昔はゲームプログラミングを勉強しようとすると、C言語でHello, Worldから入って、慣れて来たら、Windows SDKでウィンドウを作るだけのコードを書くのに何百行も書いて*5、Microsoftのヘルプファイルと格闘し、慣れて来たらDirect Xに挑戦して。。。という道を歩まなければならなかったので、今は良い時代になったなあと思います。

ゲームを作って利益を得ようとすると非常に大変な世界と聞きますが、趣味の範囲でちょっとした表現として、ゲームを作るというのは楽しいです。「なんか思いついちゃったんで、一晩でこんなクソゲー作っちゃったーwww」なんてのを繰り返してたら、思ったより楽しいゲームができてしまったとか、そういうの良いですよね!

ピアノなんかと同じです。プロになろうとすると大変ですが、趣味でゲームプログラミングをする。へたくそで良いんです。楽しめれば。

*1:先日Cocos2d-html5から名前が変わりました

*2:正確にはiPhone用のCocos2d-iPhoneってのがオリジナルで、Objective-C用みたいで、それをC++に移植してクロスプラットフォームにしたのがCocos2d-xです。その他Go言語やC#への移植版も存在するようです。

*3:後述のeBook曰く「二階から目薬(iPhone)」「三階から目薬(Android)」というようですがw

*4:当時でも僕がDelphi使いだからいいもので、C++使いの人たちはWindows SDKでまずフォームを出すところから苦労が

*5:しかも大体動かねーとかいって苦しむんですよね