サイボウズ技術者説明会 for students

学生ではないけど、 サイボウズ技術説明会 for students に参加してきた。

『Webアプリケーションをもっと楽しく! ~フロントエンドのお仕事~』(フロントエンドエンジニア天野祐介)

Kintone

  • ビジネスアプリを簡単に作れるWebアプリ
  • コンセプトはファストシステム
    • D&Dで簡単に作れる
    • 貯めたデータをグラフ表示できたりする

フロントエンジニアって?

  • サイボウズにそういう肩書きはない
  • kintoneの時にフロントエンジニアに注力しだした

Kintoneとフロントエンジニアの歴史

  • JavaScriptをフルに使った開発
  • UI実装はamachangと@yo_wakaが担当
  • 2ヶ月後にamachangが退職したので、2人でUI実装
2011年
  • パラダイムシフト
  • モダンフロントエンド開発時代へ

問題点1

  • 300ファイルぐらいロードしてたのをClosure Compilerを使って圧縮するようになった
  • 3段階の圧縮レベルがあって、advancedに対応したコードにしてる。

問題点2

  • JavaScriptのユニットテストをどうするのか問題に
  • PhantomJSをつかってテストの仕組みを実装して動かせるようにした。

問題点3

  • 何かIEで重い
  • メモリリークが発生してたので、コーディングルール的にそれを潰すせるようになった

問題点4

  • コードの凡ミスを減らすようにしたい
  • JSLintではなく、Closure Linterを使ってLintをかけるようにした。

問題点5

  • それらをCI
  • Jenkinsでjs周りをLintやPhantomJSでテストするようになった。

問題点6

問題点7

  • CSSのファイルが1000行超えると崩壊したので、Sassを使ってメンテするようになった
  • Sass/Compassを利用

2012年

  • 設計も洗練されて、継続的に進化してる
  • モバイル対応などもして行ってる
  • Kintoneは10万行ぐらい

Q&A

新しい知識をどうやって付けていくか?

  • 書籍から学んでいって、世界の流行はWeb上のリソースを探していく

JavaScriptが壊れやすい言語なのはどうして?

  • JavaScriptは型がない言語なので、やりたい放題できてしまう
  • チームで書くと、自分の意図通り動かない場合が出てきてしまうので、大規模でやるほど思い通りにできない

『iPhone/Android アプリをまとめて省エネ開発する技術』(サイボウズLiveエンジニア柴田一帆)

サイボウズLive – コラボレーションツール

サイボウズLiveのiPhone/Androidアプリ

  • iOS 25000人
  • Android 15000人

iPhoneとAndroidは五分五分のシェア

  • iPhoneアプリの33%はAndroidアプリとしても利用できる

  • iPhone

    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px;">
      <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
        XCode
      </li>
      <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
        iOS SDK
      </li>
    </ul>
    
  • Android

    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px;">
      <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
        Eclipse
      </li>
      <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
        Android SDK
      </li>
    </ul>
    
  • それぞれでバラバラ、コスト高

    <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px;">
      <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
        学習コスト
      </li>
      <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
        開発コスト
      </li>
      <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
        メンテナンスコスト
      </li>
    </ul>
    
  • iPhone/Androidでまとめて開発する

まとめて開発するには

  • 大きく分けて2津の方法
    • SDKを使わない方法
      • PhoneGap
    •   <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
          SKDを呼び分ける方法 <ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px;">
            <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
              Titanium
            </li>
            <li style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding: 0px;">
              JavaScriptで実装
            </li>
          </ul>
        </li>
      </ul>
      
    • ケースバイケースで使い分ける

    Titanium Mobile

    • iPhoneとAndroid ワンソース
    • でもハードウェアボタンなどの違いからメニューに若干違いある
    • Titaniumで自動的やってくれる部分もある
    • コードによって、違和感無いようにかき分ける場合

    Titaniumの辛い所

    • バットノウハウが多い
    • ドキュメントがあんまり整ってなかった
    • 「Titaniumで開発することはTitaniumをハックすること」

    • XMLをパースする所で落ちまくる

    Q&A

    iPhone/Android で同時開発する時Titanium/PhoneGapを検討する時に、どこらへんまでやって検討したのか?

    • 実際にプロトタイプ的な簡単なアプリを作って確認したか

    • 学習コストについてはそこまで真剣に考えてない

    『プログラマ 35 歳定年説を 38 歳の自称プログラマが徹底検証!』(リードプログラマー山本泰宇)

    小5で捨てられるMSX2さん…

    大学時代

    1. Pascal マージソートで挫折
    2. 周囲とのレベル差
    3. C++を覚えたことにされるOSの授業
    4. スレッドで挫折/Schemeは実用に向かないと思い知る

    大学院時代

    1. 分散GCの研究,1ヶ月デバッグしても動かなかった
    2. C/C++、アセンブリ、Javaなどを覚えていった
    3. 研究…
    4. サイボウズへ

    社会人時代

    1. 組み込みDBを常駐型に変える仕事で挫折/グループウェアを作る
    2. MySQLのOEM契約/外国人との交渉
    3. 開発部長 => 忙しい
    4. 開発本部長やめて降格、社内ニート
    5. CTOとしてオンプレミス(社内利用)
    6. サイボウズ全体の設計
    7. CTOを返上してプログラマに復帰

    最近

    • ストレージシステム
    • 社内勉強会
    • PKIを利用した二要素認証
      • Windows XPやiOSに対応

    質問

    • Schemeをやらないと単位が取れない

    学生ライトニングトーク

    今日からあなたもGopher! – 上田拓也

    • Go言語について
    • Googleの開発した言語
    • C/C++と同様にネイティブコードに
    • 最近開発されてる言語なのでモダンな機能がある

    型の省略

    型推論があるので、型を省略できる

    n := 100

    • クロージャー
    • 多値を返す関数
    • チャネル
      • チャネルで他の処理をできる
    • golang-ml

    質問

    AppEngine以外にGo言語の使い所

    • 並列化が得意
    • 研究向け

    Go言語を書いていいと思った所

    • 古臭くもモダンな感じ

    おわり

    • Closure Libraryを使って大規模開発してる企業が少ない気がする(他にどこがやってるんだろ?)
    • CSS以外(Closure Stylesheetsさん…)はClosure Library系を使って開発してるとのこと
    • Compassが便利という話
    • カスタムイベント管理、最初は手動だったけど、Closure Libraryのイベント管理みたいなの使ってる。
      • enumみたいに変数になるのでコード補完もできて便利

    メモ

    • Mou