Android版いこーよがリリースされました

2017年02月16日
区分
Service
報告者:
honda

こんにちは、hondaです。

2017/02/13にAndroid版いこーよがリリースされました!

プレス記事
アプリ紹介ページ
Google Play

あと、現在口コミプレゼントキャンペーンを実施しています。
是非、iOS、Androidアプリから口コミしてみてください!

このアプリでお父さんお母さんと子どもたちが楽しくお出かけできれば嬉しいです。

今後もiOS版含めて、より良いアプリを目指しますのでよろしくお願いします!

2016年Advent Calendarまとめ

2016年12月25日
区分
advent-calender
報告者:
chiba

こんにちはchibaです!

本来のAdvent Calendarは24日までで、25日は粛々と迎えるということですが、日本のプログラミング界隈を起源とするものではなぜか25日まで実行するのが習わしとなっています。

ということでネタも切れてしまったので、今年の当社のAdvent Calendarを振り返ってみることにしました。

今年も昨年と同じくQiitaを利用させて頂きましたが、参加メンバーは11名から7名へ減少、デザイナー、ディレクター、エンジニアが参加していたのが、今年はエンジニアのみでiOS/Android系の記事が大半となりました。
当社は今年はiOS/Androidエンジニアが元気です。

こういう業務とは微妙に関係しているようなしていないようなものは、忙殺されていたり、心に余裕がなければなかなか参加したくもなりませんので、皆でわいわいやれるのが、チームの健康のバロメータにもなる気もします。
来年開催するとしたら、デザイナー位は巻き込んでいけたら良いですね。

ということでまた来年!
ハッピーハッキング!

当社のOSS活動

2016年12月24日
区分
advent-calender
報告者:
chiba

こんにちはchibaです! 今回は、当社のOSS開発支援制度について書こうと思います。

当社はいこーよを始めとして、Rails等、自由ソフト/OSSを用いて開発されています。
OSSの恩恵に浴するからには、是非とも御返しもしたいところですが、開発者個人の活動はあるものの会社としての取り組みはありませんでした。

そんな当社でしたが、今年の10月から月10時間まで会社の取り組みとしてOSS活動を支援してくれることになりました。やった! 貢献するOSSプロジェクトに関しては特に制限はありません。

とりあえずお試しで10時間ということでスタートしたのですが、これまで開発していたものが10月から急にOSSにできるわけもなく、また、業務時間内となると直近のタスクを優先してしまいがちになるので、開発者は今のところあまり活用できていないようです。

そんな私も、自分のプロジェクトに来て放置していたプルリクを片付けたり、折を見付けては、ちょっとした修正のプルリクを数点投げるなどで大して活用できていません。

折角の良い取り組みだと思うので活用して行きたい!!
まずは活用できる仕組み作りからかもしれないですね。来年はどうにか工夫して活用しようと思います。

新規のAndroidプロジェクトでKotlinを採用してみた結果

2016年12月22日
区分
advent-calender
報告者:
honda

この記事はアクトインディ Advent Calendar 2016 22日目の記事になります。

現在、アクトインディではAndroid開発にKotlinを採用しています。
今回はKotlinを採用した経緯と採用後の感想を簡単にまとめたいと思います。

なぜ、Kotlinを採用したか?

単純にKotlinで書きたかった(興味、期待があった)から

正直これが一番大きかった気がします。
チームポリシーとして明言しているわけではないのですが、今のチームメンバーは「作っている人が如何にモチベーションを保って開発出来るか?」を大切にしている感があります。
あと、新規アプリだったこともあり、Kotlinを導入する障壁はありませんでした。
Javaよりも気持ちよくコードが書けそうという期待もありました。

Javaと併用可能

万が一、「Kotlinはちょっと駄目かも・・・」となってもJavaにシフト出来るので気持ち的に安心感がありました。

Swiftと似ている

Androidアプリ開発が始まる前、iOSアプリ開発をしていました。
iOSアプリ開発も新規アプリ開発だったので、100%Swiftで開発を行っていました。
開発メンバーもSwift開発者がAndroid開発も兼任していたので、JavaよりもKotlinのほうが言語習得のコストは少なくなりそうだなと考えました。
あとはNull安全が大きな採用要素でした。

実際のところどうだったか?

学習コストは低かった(感覚値)

他の言語と比較してどうだった?という風には言えないのですが、感覚値では学習で手こずった感はあまりありませんでした。
SwiftからKotlinと言語が変わっての障壁もすくなかったように思います。

導入が楽

Android StudioのKotlin用のプラグインが入っているのでJavaで書かれたプロジェクトをKotlinのプロジェクトに簡単に変換出来ます。また、アクティビティクラスなど追加する場合でも最初からKotlinコードで生成することが出来ます。

書いてて楽しい

個人的に「書いてて楽しい」の助けになっている要素の一部分をすごく簡単ですがまとめました。

・データクラス

data class SampleDataClass(val sampleVal1: Int, val sampleVal2: String)

一行で書けます。

・拡張関数

fun String.sampleExtensionFun(): String {
    // 処理
}

既存のクラスに対して関数を生やすことが出来ます。

・型推論

val sampleVar = 0

いちいち、型定義しなくても変数定義時に値を設定することで型が決定します。
が、最近Kotlin採用しているプロダクトでビルド時間が長くなってる感があるので、型推論と型を明示的に宣言している場合にどれくらいビルド時間が違うのか検証してみたいですね。

・if式

class SampleClass {
    fun sampleFun(score: Int): String {
        return if (score >= 30) "合格" else "赤点"
    }
}

ifは式です。なので上記の様にif分岐の結果をreturnとして返すことが出来ます。

・when式

class SampleClass {
    fun sampleFun(score: Int): String {
        return when(score) {
            1 -> "one"
            2 -> "two"
            3 -> "three"
            else -> "other"
        }
    }
}

when(Javaでいうところのswitch)は式です。なので上記の様にwhereの結果をreturnとして返すことが出来ます。

・名前付き引数とデフォルト引数

fun sampleFun(sampleArg: Int = 0) {
    // 処理
}
sampleFun(sampleArg = 1)

関数/メソッド呼び出し時に引数を指定出来ることでコードが明確になります。
デフォルト値を設定することで引数を省略することも出来ます。

・ラムダ式

fun main(args: Array<String>) {    
    val sampleClass = SampleClass()
    sampleClass.sampleFun {
        print("callback")
    }
}

class SampleClass {
    fun sampleFun(callback: (() -> Unit)) {
        callback.invoke()
    }
}

ラムダを使って、簡単にコールバックなどを定義することが出来ます。

・Null安全

fun main(args: Array<String>) {    
    val sampleClass = SampleClass()
    sampleClass.sampleVar = "0"
    print(sampleClass.sampleVar1.toInt())  // エラー
    print(sampleClass.sampleVar1?.toInt()) // 安全呼び出し(?)をつけることで正常に動作します
}

class SampleClass {
    var sampleVar1: String? = null // Nullableな定義
    var sampleVar2: Int = 0 // NonNullな定義
}

Kotlinは言語的にNullPointerExceptionが発生しそうなところ変数参照などのコードで静的に警告が出て、Compileも出来ない様になっています。 これだけでだいぶ安心してコードを書くことが出来ます。 また、データ表現としてNonNullで定義するか?Nullableで定義するか?を意識出来る様になってきます。 メンバー間で議論することもあり、有意義なコードを書ける様になっていきます。

・エルビス演算子(?:)

class SampleClass {
    fun sampleFun() {
        val sampleVal = huge() ?: return
        // 処理
    }
}

エルビス演算子を使って、hoge()の戻り値がnullだった場合は上記の処理でreturnすることが出来ます。

・などなど・・・

Kotlinにはコードを早く楽しく書くための機能が言語的に備わっていたり、シンタックスが簡潔です。
なのでプロダクトに必要な本質的な実装に集中することが出来ます。

まとめ

足早なKotlinの紹介でしたが、1からAndroidアプリを作るときに開発言語でKotlinを使ってみることをおすすめします。
Kotlinはいいぞ。

最後に

KotlinでAndroidアプリ作りたい!アクトインディにジョインしていこーよを開発をしたい!方はこちらまで!

timecopのちょっとした使い方

2016年12月19日
区分
advent-calender
報告者:
endo

この記事はアクトインディ Advent Calendar 2016 19日目になります。 どうぞよろしくお願いします。

今回はtimecopについて説明します。

timecopとは

timecopはRubyのgemです。

過去の時間、未来の時間の日付で動作するようになります。

なお、現実では戻れないので、そこは注意が必要です。

簡単な使い方

簡単な使い方です。

Timecop.travel(2017, 1, 1) do
  Time.new
end
=> 2017-01-01 09:00:00 +0900

メソッドのブロック内の時間が未来になっているかと思います。

これを利用して、テストでは過去の時間、未来の時間にすることで特定のタイミングでのテストが書けることができます。

ちょっとした使い方

用途としては、テストで使うのが一般的だと思います。

ただ、特定のタイミングでのバッチ処理の結果が欲しい場合があります。

その中身のメソッド内で下記のようなコードがあったとします。


class Batch

  def self.update_analyses
    end_on = Date.today
    start_on = end_on - 3
    ...
    ...

  end

end


こういうメソッドの過去のデータが消えていて、過去のデータが欲しい場合にtimecopが役立ちます。

Timecop.travel(2016, 4, 1) do
  Batch.update_analyses
end

過去のデータが取れます。

以上です。

本当に時間が戻れればいいんですけどね。

 | 

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa