ボクダイモリ

Life is like a Game

Android4.3以前の標準ブラウザはplacefolderをサポートしていない

placeholderのcssをどうやって古いAndroidのブラウザにも対応させようかで詰まってたけど、 そもそも対応してなかったというオチ

http://caniuse.com/#search=placeholder

リンク先の通り、Android4.3以前のバージョンはplaceholderをサポートしていない。 もっと早くにこの線で調査すればよかったorz

caniuse便利だね

継続的インテグレーションによって何が出来るようになるか考えてみる

継続的インテグレーション(CI)について、軽くググってみたら色々出てきた。

継続的インテグレーションとは?– アマゾン ウェブ サービス

www.techmatrix.co.jp

なんでこんなこと調べていたかというと、社内のプロジェクトでCIについて議論する機会があったが、 この辺のノウハウには疎かったのであまり話についていけず気になっていたから。

今現在所属しているプロジェクトは、短いスパンでサービスをリリースしてはそれと並行して開発進めている、いわゆるアジャイル開発だ。
また、開発自体は外部に委託していて、うちの会社はコードの品質管理などをしている。

そんなプロジェクトだが、歴史自体は浅くCIツール(Jenkins)などは導入されていない。
あるとすればコードの品質を最低限保つためのSonarQubeがあるだけ。
それとソースはGitで管理しているが、なぜかリポジトリはBacklogで管理されている。
また、ブランチ管理はGit FlowとかGithub Flowとかではない。masterとリリース+開発用のブランチがあるだけ。

こんな感じのプロジェクトだが、プロジェクトの現状についてどう改善していくか議論する機会をもらえたので、 せっかくなのでCIツールとは何か、CIってなにするのか、問題点とか将来こうしたいなど自分の考えとか理想とかをまとめてみる。

CIについて

CIについては上のAmazonのページがよくまとまっている。
CIの目的はつまりこのような感じだろう。

  • 開発者の生産性向上
  • コードの品質向上
  • リリースと結果確認にかかる時間の短縮

上記3つを目標とする際、実際にするべきことはなんだろうか。それぞれ必要なことを軽く挙げてみる。

開発者の生産性向上

  • 重要なコーディングに集中する
  • 開発中に埋め込まれるバグを減らす
  • バグを早期発見する仕組みを作る

コードの品質向上

  • コードレビューを実施する
  • コーディング規約を設けて機械的にコードをチェックする
  • 定期的にビルドする(コンパイルエラーになるようなコードは埋め込まない)

リリースと結果確認にかかる時間の短縮

  • リリーススクリプトを用意して、リリース作業を自動化する
  • ビルド、リリース結果を担当者に通知する
  • ビルドからリリース結果確認までの手順を簡略化する

CIツール等を使えば上記のようなことはできそう。
他にもできることはありそうだが、とりあえずは上の項目をプロジェクトに盛り込みたい。

現プロジェクトの問題点

今プロジェクトが問題にしていることはだいたい以下の通りである。

  • CIツールがないため、自動ビルドや自動デプロイというような仕組みがなく、その作業に時間を使っている
  • 品質向上の為、SonarQubeを使ってはいるが、手動で行っていて時間がかかっている
  • 開発フローにコードレビューが存在せず、局所的にコードレビューを行っているのみ
  • リリースの手順が複雑、時間もかかる

現プロジェクトの問題点として、自動化できるような部分で時間を取られていたりしていて面倒くさい。
やはりエンジニアとして自動化出来る部分は自動化して、本質的な作業に集中したい。

また、ブランチ管理の規約を設け、開発用のブランチを用意することでブランチの構成をシンプルにした上で、 他のツールとの連携もしやすい環境にしたい。

そのためにもまずは、JenkinsなどのCIツールの導入や、ブランチ管理、開発フローの見直し等が必要なのかなと 考えている。

今後について

今のプロジェクトについて問題点を挙げたので、次はそれについて具体的な解決策などを模索していきたい。 まだまだ勉強不足で考慮が足りていない部分もあるだろうけども、今後メンバーとプロジェクト体制を見直していく上で 少しずつ知識を身に着けていければいいかなー。

まとめ

今回はCIとは何であって、プロジェクトの問題に焦点を当てながら理想の開発環境を書いてみた。

今後どうやってCIを導入していくかは気が向いたら書く。
今はもう疲れたから寝る。

【Swift3.0】Errorプロトコルを使った例外処理のサンプルを作ってみた

Swift3.0でErrorプロトコルとdo~catch構文、tryを使ってみた。 最小限のコードだけメモとして残しておく。

実行した環境は以下の通り

  • xcode version:8.2.1
  • swift version:3.0.2

Errorプロトコルを定義

以下の様にErrorプロトコルを定義する

enum TestError:Error {
case Error1(String)
case Error2(String)
}

enum要素に引数をとることで、エラーメッセージなどを呼び出し元から参照することができる。

次に上記の例外を投げる関数が以下。

func TestMethod(str:String) throws {
if str == "error1" {
throw TestError.Error1("エラー発生1")
}
else if str == "error2" {
throw TestError.Error2("エラー発生2")
}
}

また、例外をthrowするメソッドはthrows宣言をしないとコンパイルができない。

try~catch構文とtryで関数呼び出し

作成した例外を投げる関数をdo~catch構文の中で呼ぶ。
関数を呼び出すときは先頭にtryをつける。
Errorプロトコルの要素は引数にStringを取っているので、 例外発生時にその値を出力するようにしてみる。

do {
try TestMethod(str: "error1")
} catch TestError.Error1 (let err) {
print (err)
} catch TestError.Error2 (let err) {
print (err)
}
//実行すると「エラー発生1」と出力される

まとめ

  • Errorプロトコルを使うことで例外を定義できる
  • 要素に引数を与えることで、例外発生時に呼び出し元にデータを渡せる
  • 例外を投げる関数にはthrows宣言をつける
  • 例外が発生しうる関数の呼び出しはdo~catch文の中で呼び出す

2017年の抱負

明けましておめでとうございます。
2016年もあっという間に過ぎて社会人生活も3年目に突破しようと
しています。

社会人になってから時間が経つのがものすごく早く感じます。
この一年間でたくさんの人と出会って、慣れない仕事もそれなりに経験してきましたが
本当に時間の流れというのはあっという間です。
それでも今ある時間をより充実したものにするために、今年は目標をつらつらと立ててみたいと思います。

続きを読む

2017年の抱負

明けましておめでとうございます。
2016年もあっという間に過ぎて社会人生活も3年目に突破しようと
しています。

社会人になってから時間が経つのがものすごく早く感じます。
この一年間でたくさんの人と出会って、慣れない仕事もそれなりに経験してきましたが
本当に時間の流れというのはあっという間です。
それでも今ある時間をより充実したものにするために、今年は目標をつらつらと立ててみたいと思います。

続きを読む

自分が面白いと思える本の見つけ方

自分に合った本を見つけるって難しいですよね。
僕は最近本屋に行くとビジネス書や技術書を探すことが多いのですが、
1時間ぐらい店内を探してもなかなか面白そうだと思える本は見つかりません。

IT系の技術書であればどんな言語を勉強したいかが明確であれば、目的の知識が得られる
本を見つけるのは難しくないでしょうが、小説などの文庫本となると物語の舞台だとか世界観だとかキャラクターの個性だとか作者の文章が読みやすいかなどで好き嫌いが分かれるでしょう。

続きを読む

自分が面白いと思える本の見つけ方

自分に合った本を見つけるって難しいですよね。
僕は最近本屋に行くとビジネス書や技術書を探すことが多いのですが、
1時間ぐらい店内を探してもなかなか面白そうだと思える本は見つかりません。

IT系の技術書であればどんな言語を勉強したいかが明確であれば、目的の知識が得られる
本を見つけるのは難しくないでしょうが、小説などの文庫本となると物語の舞台だとか世界観だとかキャラクターの個性だとか作者の文章が読みやすいかなどで好き嫌いが分かれるでしょう。

続きを読む