「Kotlin Development for Android (Create Your Own App)」を読みました

KotlinでAndroidアプリを作る練習をします。

TOC

  • Chapter1 Intro to Kotlin
  • Chapter2 Android Studio 3.0 Set-Up
  • Chapter3 Hello World! (Your First App)
  • Chapter4 Higher or Lower (Your Second App)
  • Chapter5 BMI Calculator (Your Third App)
  • Chapter6 Extras
  • Chapter7 Conclusion

英語が貧弱なのでだいぶ意訳でまとめていきます。要旨なのでエッセンスが入ってればいいんだよの精神です。

Chapter1 Intro to Kotlin

Kotlinについて、Javaと100%互換性がありコード記述行数が40%削減できる学習コストの低いすごい言語だよ、KotlinをはじめるためにこれからAndroid Studioをダウンロードしてセットアップしよう、そうすればアプリの開発が始められるよ、とのことでチャプター2へ

Chapter2 Android Studio 3.0 Set-Up

Android StudioのインストールとAndroidバイスのUSBデバッグ方法について。割愛。

Chapter3 Hello World! (Your First App)

Android Studioで新規プロジェクトを作成する方法と、デザイナーでボタンとテキストを配置する方法、ボタンにクリックイベントを設定する方法について。

Chapter4 Higher or Lower (Your Second App)

ユーザーの入力に応じて結果を変える処理、トースト、追加のアクティビティ(画面)を使用する方法について。

lblFeedback.getText()

とあるけど、Kotlinではgetter/setterでアクセスできる。

lblFeedback.text

それから、トーストの表示にtoast()だけ記述しているけど、実際にはこう書かないと動かなかった。

Toast.makeText(applicationContext, "Please enter a number", Toast.LENGTH_LONG).show()

Chapter5 BMI Calculator (Your Third App)

  • BMI = (weight(kg) / height(m)) / height(m)

アクティビティにデータを渡す方法について。

Chapter6 Extras

Kotlinからは微妙に離れるけど、その他のアプリケーション開発のスキルについて。

別方向(横向き)のスクリーンデザインと、アプリアイコンの設定方法。

Chapter7 Conclusion

ここまでにできるようになったことの振り返り

  • Build an app from scratch
  • Create diffrent activities for your apps
  • Link those activities together
  • Send data between activities
  • Understand and utilise constraints with different elements
  • Use images in your apps
  • Write your own Kotlin functions
  • Develop apps for different screen orientations
  • Create and change app icons

感想

ざっくりAndroidアプリを作れるようになりました。 しかし、要素の配置がいまいち思い通りに出来ない(相対位置を指定しないとぐちゃぐちゃになるのなんでかわかってない)ので、もうちょっとちゃんと勉強しないといけなさそうです。XAMLのときは実地でなんとかしたので手を動かすしかないか。

英語を読む気力がなかなか湧かなくて、短いテキストにもかかわらず読み終わるのに時間がかかってしまいました。英語もスラスラ読めるようになりたいなぁ。

「速習Kotlin〜Javaより簡単!新Android開発言語を今すぐマスター」を読みました

マルチプラットフォームアプリケーション開発の勉強中で、各プラットフォームの開発の学習をしているので、Androidアプリ開発で使う言語としてKotlin触ってみようと思います。

TOC

Part1 イントロダクション

Kotlinとは何ぞや?ということで、Kotlinの特徴と開発環境の準備について記載されている。

  1. 簡潔
    • Javaと比較して短く書ける
  2. 安全
    • Null安全とスマートキャスト
  3. 相互運用性に優れる
    • altJSやKotlinNativeがあり、様々な開発に使用できる
  4. ツールとの親和性に優れる
    • IDEやツールがKotlinをサポートしている

Part2 基本構文

  • 変数宣言は var, val
    • varが再代入可能、valが不可(定数)
    • コンパイル時定数の const キーワード
  • 8進数リテラルがない
  • 文字列リテラルは Escaped String, Raw String
    • Raw Stringはいわゆるヒアドキュメント。trimMarginという行頭余白を落とすメソッドがある
  • 文字列テンプレートあり
  • Null許容型、ボクシングは他言語とだいたい一緒
    • if式でNullチェックをすればブロック内でNull許容型をそのまま使用可能(スマートキャスト)
  • 型変換は明示的に行う必要あり
  • ラムダ式で i -> i を省略できる it 変数
  • コレクションを生成する xxxOf, mutabuleXxxOf

Part3 演算子/制御構文

  • 同値性 == (.equals相当), 同一性 === (==相当)
  • 三項演算子なし。if式で行う
  • if (i in 1..20) { println("iは1〜20の範囲") }
  • ビット演算子は(演算子ではなく)関数として提供
    • and, or, xorなど
  • if, whenは式なので値を返せる
    • val a = if (b == 1) { "1" } else { "not 1" }
  • for inが基本。mapに対しては for (key, val) in
  • for i in 1..10 step 3 で増分変更
    • for i in 10 downTo 1 でデクリメント方向
  • ラベルは末尾 @
    • label@, break@label

Part4 関数

  • 関数の宣言はfun
  • 引数、戻り値の型指定必須
    • 何も返さない戻り値 Unit については省略可
  • 可変長引数 vararg, 可変長引数に配列を渡す *list
  • 複数の戻り値型は Pair, Triple で表現
  • 高階関数として引数に関数を渡す ::func
  • ラムダ式内でのreturnは呼び出し元での return になること注意
    • ラムダ式の終了は return@label または return@forEach (関数名)でラベルで指定
  • 関数内で関数を定義するとローカル関数になる

Part5 オブジェクト指向構文

  • デフォルト public
  • class name()の部分でコンストラクタ生成できる
  • プロパティのgetter, setterでバッキングフィールド field を使用できる
  • パッケージはフォルダ構成一致させる必要なし
  • インポートは as で別名でインポートできる

Part6 継承とインターフェイス

  • デフォルト final のため、継承可能なクラスは open 修飾子で明示する
    • 抽象クラスには abstract
  • インターフェイスの定義は class の代わりに interface

Part7 特殊なクラス

  • データクラス
  • オブジェクト宣言
  • オブジェクト式
  • コンパニオンオブジェクト
  • enumクラス
  • ジェネリック

データクラスべんりそう。

Part8 もっとオブジェクト指向

委譲プロパティ、委譲クラスが言語仕様でできるの良いですね。

感想

Javaの知識を活かして差分の知識を素早く習得」とあるように、あっさりとKotlinの言語仕様を学習できました。 Swift, TypeScriptのような新しい言語のいいとこ取りって感じでいいですね。Kotlin覚えれば主要モバイルプラットフォームで使う言語だいたい使えるようになるので頑張るぞ。 ただ、この本ではKotlinの活用先であろうAndroidアプリ開発については全く触れていないので、そちらは別の場所で学習が必要でしょう。

そういえばエラー処理について書かれていなかったけど、そこはJavaと同じなのかな…めんどい。

「Unity5ゲーム開発はじめの一歩」を読みました

読んで作ってみたので書きます。

Unity 5 ゲーム開発はじめの一歩 ThinkIT Books

Unity 5 ゲーム開発はじめの一歩 ThinkIT Books

TOC

  • はじめに
  • 第1章 新しくなったUnity
  • 第2章 Unity5でコインプッシャーゲームを作ろう(前編)
  • 第3章 コインプッシャーゲームを作ろう(中編)
  • 第4章 Unity5でコインプッシャーゲームを作ろう(後編)
  • 第5章 uGUIの簡単な使い方
  • 第6章 複数人で1つのUnityプロジェクトを管理するには
  • 第7章 全国各地で盛り上がりを見せるゲーム開発イベント
  • 著者紹介

はじめに

本書では、Unity 5 Personal Editionを利用して、実際にコイン落としゲームを制作しながらUnityの様々な機能を体験する。

第1章 新しくなったUnity

略。

第2章 Unity5でコインプッシャーゲームを作ろう(前編)

  1. 新規プロジェクトを作成して
  2. Unityの画面の見方、操作方法を学んで
  3. コインプッシャーの土台を作って
  4. コインに物理演算を加えて
  5. ゲームの視点を調整して
  6. コインに色を付けて
  7. 作成したシーンを保存

第3章 コインプッシャーゲームを作ろう(中編)

こんな感じになった。(クソというのは筆者の題材が悪いという意味ではなく私が作ると虚無のゲームになるという意味です)

第4章 Unity5でコインプッシャーゲームを作ろう(後編)

  1. コインの枚数を表示してみる
  2. コインの枚数を増減させる
  3. コインが土台から堕ちたときの処理
  4. コインが土台から落ちて加点したときに効果音を鳴らす
  5. Assetを利用して、ステージを飾ってみる

できた。

第5章 uGUIの簡単な使い方

ボタンが必要なソフトを作ったときにやってみます。

第6章 複数人で1つのUnityプロジェクトを管理するには

GitHubがあるから大丈夫。

第7章 全国各地で盛り上がりを見せるゲーム開発イベント

割愛。

感想

github.com

本日の成果物です。

楽しげなものができました。素敵な本をありがとうございました。

「後悔しないためのVueコンポーネント設計」を読みました

技術書典5で、悩める私を救ってくれると信じて購入した本です。

ponyhead.booth.pm

TOC

はじめに

本書は、筆者が業務および個人プロジェクトで得たVue.jsの知見を文書化したもの。

第1章 なぜテストを書くのか

「他人に迷惑をかけるコードを書きたくない」わかりが過ぎる…

第2章 テストしやすいコンポーネントと、テストしづらいコンポーネント

後悔しないためにはテストを書く、テストを書くためにテストしやすいコンポーネントを作る、そのためには下記を押さえようという話。

  • テストしやすいコンポーネント
    • 機能が少ない(メソッド数ではなく、担う役割)
    • 依存がない/少ない
    • 状態をもたない

依存は少なく

値を取り出すコンポーネントと値を表示するコンポーネントに分けることで、Storeに依存する場所をなるべく少なくする。

dataを使うパターン

コンポーネントに閉じた状態を表現するとき。トグルとか。

propsの型指定で避けたほうがいい型

  • Number
  • String
  • Array
  • Object
  • Boolean

上記はJSONで表現可能。それ以外の型(Dateなど)を使うと通信やデータストアで型変換が必要になりテストが複雑になるため、避けたほうがいい。

props down event up

  • 親から子へは props でデータを渡し、子から親へは this.$emit でイベントを返す。
  • 子からのイベントを購読するやり方か、propsでFunctionを渡すやり方かは、プロジェクトで統一されていればいい。

ライフサイクルフックに直接処理を書かない

  • vue-test-utilsではフックをmockできないのでテストできなくなる。

第3章 コンポーネントを分類する

コンポーネントを Presentational Component と Container Component に分類する。

  • Presentational
    • 主にpropsで渡されたデータを表示する
    • これ以外の機能を持たないようにいろいろ制約をつける(割愛)
  • Container

第4章 ディレクトリ構成とコンポーネントの分類

こんな風にディレクトリ切ると良いよという話。

  • basics
  • components
  • containers
  • pages

私は普段こんな感じ。

  • atoms
  • molecules
  • organisms
  • pages

どちらも小さい順に上から下へフォルダが並びますね。役割も一致してる。

第5章 なにをテストするか

  • templateで次の項目が正しく動作するか
  • propsが正しく受け取れるか
  • methodsが正しく動作するか
  • $emitでイベントが正しく発火するか
  • slotが正しく動作するか
  • コンポーネント同士が正しく協調しているか

最後のはざっくりした結合テストだけど業務ではここでやってしまったほうが良い箇所のような気がする。

第6章 テスト実行環境の構築

割愛。

第7章 テストを書く

ここではコンポーネントごとのテスト方法をJest,vue-test-utilsの使い方も含め、具体例を挙げて紹介している。実際にテストを書くときに参考にします。

あとがき

書きたいことが多くてそこそこのボリュームになったということ。確かに同人誌としては想像以上のボリュームだった。

感想

恥ずかしながら知らないことが結構あって非常に参考になりました。なにかに特化したソフトウェアエンジニアではないのもあり、どの分野も知識が浅いんだよなあと反省しました。フロントエンドのデザインパターンてどこで勉強してるんだろう。何をテストしたら良いのか、というのはしょっちゅう悩んでしまうので、実践する際に繰り返し読み返そうと思います。あと表紙がかわいい。

素晴らしい本をありがとうございました。

「GOで全ウェブサイトCLI化計画」を読みました

技術書典5で見かけてビビッときたので買った本です。

booth.pm

読みながら試したリポジトリc18t/hello-cobra

TOC

  • はじめに
  • 第1章 cobraによるCLI開発の基礎
  • 第2章 Chrome DevTools Protocolとchromedp
  • 第3章 技術書典サークル検索CLI
  • おわりに
  • 著者紹介

はじめに

  • SPAの台頭によりスクレイピング界は未曾有の危機に陥っていた。
  • その救世主となったのがChrome DevTools Protocol。そうですね!

第1章 cobraによるCLI開発の基礎

  • cobragolangのためのCLI開発支援ツール/ライブラリ。
  • go get github.com/spf13/cobra/cobraでインストールできる。
  • cobra init github.com/c18t/hello-cobra~/.go/src/github.com/c18t/hello-cobra プロジェクトフォルダができた。
  • cd して go install でもう hello-cobra が動く。とっても簡単。
  • cobra add goobyehello-cobra goodbye サブコマンドを追加できる。これも簡単。
    • ここでひとつfishシェルだと問題があった。私の環境だと ~/.go/src~/Project にリンクしてるんだけど、$GOPATH以下に居ないとcobra addは動かせないらしく、fishがシンボリックリンクのパスを実パスに直す仕様のために動かなかった。仕方がないので bash で $GOPATH 以下に移動して実行した。
  • オプションハンドリングの方法も解説あり。あとでviper試そう。

第2章 Chrome DevTools Protocolとchromedp

使い方については割愛。

第3章 技術書典サークル検索CLI

実践編。サークル情報を取得する機能と、取得した情報をfzfで検索できるよう出力する機能、ブラウザで開くためのURLを取得する機能の3つを実装する。(その他の機能はfzf, openなどコマンドを組み合わせる)

おわりに

CLI化できればcronなどと組み合わせることで作業時間をゼロにすることも可能!自動化しよう!

感想

GoでCLIツールを作っている最中だったのでまさにこれが欲しかったんだよという感じの本。goについてはとにかくどのライブラリを使って良いのかさっぱりわからないので、cobraの選定理由もちゃんと書いてあってありがたかったです。あと表紙がかわいい。

素晴らしい本をありがとうございました。

「WebVR/ARのはじめかた」「WebXRの現状2018Autumn」を読みました

技術書典"4"で購入して読んだものの要旨が書けてなかったものに加え、続編のWebXRの現状2018Autumnも読んだのでメモ。

taimen.jp

WebVR/ARのはじめかた

  • はじめに
  • 第1章 VR、AR、そしてWebVR、WebARとは
  • 第2章 WebVRコンテンツの開発
  • 第3章 WebARコンテンツの開発
  • 著者紹介

はじめに

本書は技術書典2で頒布した「A-FrameではじめるWebVR【導入編】」をベースに、より網羅的にWebVR、WebARの「はじめの一歩」を解説した技術同人誌。2018年4月現在の状況を踏まえた本。

第1章 VR、AR、そしてWebVR、WebARとは

  • VRとは、その歴史、日本バーチャルリアリティ学会について。
  • VRの日本語訳として「仮想現実」が用いられることが多いが、誤り。学術的には「人工現実感」。前述の日本バーチャルリアリティ学会のウェブサイトに解説があるので、興味のある方は参照。→ 日本バーチャルリアリティ学会 » バーチャルリアリティとは
  • ARとは、「拡張現実感」。
  • WebVR/ARとは、「ウェブブラウザを通して体験できるVR/AR」。一般的なウェブ技術で作られる。
  • WebVR APIとWebXR Device APIについての解説。
  • 各プラットフォームの対応状況。
  • WebVR、WebARのメリット・デメリット
    • かんたん(体験・開発)
    • リッチなコンテンツ開発は難しい。ただし、ブラウザの進化とともに差分はなくなるかもしれない。

第2章 WebVRコンテンツの開発

  • WebGLを操作するためのライブラリ、フレームワークを使用して開発するのが一般的。
  • WebVRコンテンツを開発するための選択肢として、下記が挙げられている。
    • Three.js
    • A-Frame
    • React VR
    • そのほか(開発が止まってる)
  • WebVRを公開するプラットフォームについて、
    • PlayCanvas
    • Amazon Sumerian (AWS)
    • STYLY Suite
  • ゲームエンジンを利用したWebVRについて、UnityとUE4に触れている。

第3章 WebARコンテンツの開発

WebARもThree.js、A-Frameなどのライブラリ、フレームワークと組み合わせて作成することが多い。

ARに興味が薄いため割愛。

WebXRの現状2018Autumn

  • まえがき
  • 第1章 VR、ARとは
  • 第2章 WebVR、WebARとは
  • 第3章 ウェブブラウザ要件
  • 第4章 WebVRコンテンツの開発
  • 第5章 WebARコンテンツの開発
  • あとがき

まえがき

本書は過去頒布したWebXR本のアップデート版という位置づけ。重複する箇所もあるが、描き下ろしとなる新しい情報も含まれている。

重複しているところは割愛していきます。

第1章 VR、ARとは

  • VRの歴史について。
  • VR元年という言葉が流行したが、学術的には50年以上研究されている歴史ある分野。
  • VR元年というよりはVR Ready元年。
  • ARの歴史ついて。
  • ARの教科書が2018年7月に出版された。ARに興味をお持ちの方は手にとって見ることを強く推奨。

これかな。

ARの教科書

ARの教科書

第2章 WebVR、WebARとは

  • WebVR APIはバージョン1.1で更新が止まり、今後更新されることはない。WebXR Device APIがその機能を置き換える。
  • ミルグラム「複合現実感の連続体」
  • 現在はWebVR/ARと呼ばれているが、いずれはImmersive Web(没入型ウェブ)と呼ばれるようになるかもしれない。

第3章 ウェブブラウザ要件

各ベンダーのウェブブラウザをその使い方からかなり詳細にレビューしている。すごい。SUPERMEDIUMはあとで試す。

第4章 WebVRコンテンツの開発

React VRは React 360に名称が変わったらしい。割愛。

第5章 WebARコンテンツの開発

Appleが発表したAR Quick Lookについての節が大幅に追加されている。割愛。

感想

実態や現状をつかみにくいXRの世界において、WebVR/ARについてこれだけ網羅的かつわかりやすくまとめてくれた本はないのではないか、と思います。WebでXRはフロントエンドができればとっつきやすいジャンルだと思うので、私のような「これからVR開発試してみようかな」という方へのガイドとして、この本はおすすめできます。

「わかる!ドメイン駆動設計」を読みました

技術書典"4"で購入して読んだものの要旨が書けてなかったので書きます。

booth.pm

TOC

  • はじめに
  • プロローグ
  • 目次
    • DDDってなに?
    • ユビキタス言語ってなに?
    • ドメインモデル
    • 境界づけられたコンテキストって?
    • コンテキストマップ
    • コンテキストマップを活用する
  • エピローグ
  • 著者紹介

はじめに, プロローグ

  • 本書はドメイン駆動設計(DDD)の解説書。
  • 入門に必要な知識をわかりやすく、物語を通じて理解できる
  • 主人公もちこちゃんが出会った問題について、ソフトウェアモデルを設計していく

DDDってなに?

  • ソフトウェア開発手法で、ソフトウェアモデルを設計する手助けとなる手法。
  • どのように設計していくかという理論、考え方、概念。特定の技術的なパターン集ではないし、明日から使えるノウハウ集でもない。難しい
  • この本はDDDの概念を正しく理解し、噛み砕くことを助けるためのもの。本書だけではDDDを理解できない。エリック・エヴァンスのドメイン駆動設計や実践ドメイン駆動設計も読もう。

用語についての解説やコラムあり。省略。

ユビキタス言語ってなに?

  • ドメインエキスパートやソフトウェア開発者を含めたチーム全体で作り上げる共通言語のこと。
  • チームで共通する言語として最善の用語を見つけていくことで、同じものを指しているのに異なる呼び方をされているものが存在することを防ぐ。
  • ドメインエキスパートの話す言葉を観察し、用語やフレーズを発見していく。
  • 発見した用語について議論し、ユビキタス言語として確立する。

ドメインモデル

  • ドメインを適切に表現したもの。コードに落とし込む前の、より概念的なモデル。
  • チームメンバー全員が同じものを思い浮かべ、同じ解釈をするもの。
  • ドメインを反映したものとしてドメインモデルがあり、ドメインモデルを表現したものとしてソフトウェアモデルがあり、ソフトウェアモデルを実装したものとしてオブジェクトモデルがある。

ドメインモデル貧血症

  • ドメインモデルがただのgetter, setterの集まりになってはいけない。意図を反映する。

境界づけられたコンテキストって?

  • ドメインとはユーザーがプログラムを適用する業務の領域や業務を進めるための方法。
  • ドメインサブドメインに分割される。会計のソフトウェアが簿記の機能、印刷の機能、グラフ表示の機能を持つようなイメージ。
  • 境界づけられたコンテキストとは、ユビキタス言語が成り立つ範囲のこと。この文脈ではAはBを意味する、といったときの範囲にあたる。この境界はドメインモデルがどこに属するかを明示的に示す。
  • この境界を見つけ、ドメインモデルの所属する範囲を定める。

コンテキストマップ

  • 境界づけられたコンテキストとそれらの関係性を描いたもの。
  • 現状を正しく表現することが重要。理想的な地図を描くことが目的ではない。

コンテキストマップを活用する

  • ドメイン駆動設計では、境界づけられたコンテキスト間の関係性として8つのパターンが紹介されている。
    • これは元の本を参照したほうが良さそう。

エピローグ

次回に続く。次回、あるのか?楽しみ。

感想

元の本を読みたいと思っていたところだったので手にとってみました。エリック・エヴァンスのドメイン駆動設計や実践ドメイン駆動設計を読むための足がかりとしてよかったです。ドメイン駆動設計をなんとなくわかった気になれました。ただ、わかった気になれただけで全然わかってないので、やはり元の本を読むことは必須。

また、事例が非常にありがちで、読んでいて身につまされる思いです。