LINE Engineering
Blog

  • LINE Creators Studioに広がる美しい型の世界(前篇)
    tarunon 2017.08.04

    こんにちは、tarunonです。 この半年間はLINE Creators StudioのiOS appを担当していました。一番最初のコードベースを作るところから担当でき、そして前回のLINE Engineering Blogでの知見もあったので、「コンパイラが証明できる世界」というものを目標に開発に取り組むことができました。 中でも、特に上手く行って他のプロジェクトにおいても同様に有用であろうものを2つ、紹介致します。前篇はInterface Builderについてtarunonが、 後篇はAPI Clientについて@ukitakaがお話します。

    LINE Creators Studioで使っているInterface Builderの環境と同様(少し進歩しています)のものは、こちらに切り出していて、すぐにPlaygroundで遊べるようになっています。→ Instantiate

    もしかしたらスター点けてくれてる方もいらっしゃるかも? Instantiate自体はLINE BLOGの頃からちょこちょこ書いていて、LINE Creators Studioの開発中も並行して書き進めていました。 コードを見たほうが楽しい方はぜひ上記リポジトリもご参照下さい。 LINE Creators StudioのView/ViewControllerは以下のコードでインスタンス化することが出来ます。これは全てのView/ViewControllerで共通しています。(※Instantiateとは若干の差異があります。)

    LINE Creators Studio

    もっと見る

  • LINE Creators Studio開発に使われるKotlinのご紹介
    Freddie Wang 2017.07.28

    LINE FukuokaでAndroid開発を担当しています。熱心なKotlinユーザーです。

    はじめに

    こんにちは。LINE Fukuokaの開発チームで働いているFreddie Wangです。LINE Creators Studioという、誰でもオリジナルのスタンプを作ることができるようサポートするスタンプ制作ツールのAndroidアプリ開発を担当しています。LINE Creators Studioで作成したスタンプはLINE Storeで販売することができ、LINEを利用しているすべてのユーザーが購入できます。

    今回の記事では、LINE Creators Studioアプリの開発に全面的に採用しているプログラミング言語「Kotlin」についてご紹介します。Kotlinをメイン言語として選んだ理由と主に使っているKotlinの機能を説明します。

    Kotlinの利点と主要機能

    Google I/O 2017において、GoogleはAndroid Studio 3.0からKotlinを公式にサポートすることを発表しました。LINE Creators Studio開発プロジェクトをキックオフしたのは2016年末でしたが、当時は、短期間でこのプロジェクトをMVP(Minimum Viable Product)プロジェクトに成長させないといけない課題を抱えていました。Kotlin 1.0がリリースされてからかなりの時間が経っていましたが、チームの中にはKotlinを使ってみた経験のあるメンバーがいませんでした。そのため、開発に着手する前にまずKotlinについて調べてみました。その結果、以下のような利点からKotlinを採用することにしました。

    Kotlinを選んだ背景

    Javaとの互換性は100%

    Kotlinの最大の魅力は、KotlinコードとJavaコードを一つのプロジェクト内で共存させることができ、既存のJavaライブラリをすべて使用できるということです。このプロジェクトにはJavaレガシーコードはありませんでしたが、Dagger 2、Retrofit、RxJavaといったJava互換ライブラリを使いたいという希望がありました。

    簡潔な構文

    Kotlinは問題解決のために設計された言語です。Kotlinの主な目標の一つは、簡潔なコードをJavaより簡単に書けることです。これは、Androidアプリ開発において欠かせない重要な要素です。

    依存性の減少

    Kotlinは、Guavaのようにサイズの大きいJavaライブラリに取って代わることのできるコンパクトなランタイムライブラリを持っています。大容量のライブラリは、サーバーやデスクトップ環境では大した問題ではありませんが、Androidでは問題を引き起こす可能性があります。Androidアプリを開発する際にはメソッド数が65Kを超えられないという制限があるので、大容量のJavaライブラリの利用は控える必要があります。Kotlinのstdlibライブラリ(バージョン1.1.3-2)はメソッド数が6306個なので、メソッド数による影響はGuavaライブラリより少なくなります。

    旧バージョンのAndroid端末をサポート

    Kotlin 1.0はJava 6を基準にしているので、バージョン2.3以上のAndroid端末をサポートできます。これもまた、Android開発者にとって重要なポイントです。

    Kotlin Android Programming language

    もっと見る

  • LINE BLOGアプリ開発で contenteditable と戦った話
    tarunon 2017.04.27

    こんにちは、LINE Fukuoka の tarunon です。LINE BLOG iOSのリリースまで、クライアントとエディタの開発を担当していました。昨年11月に、LINE BLOG は一般開放と、iOS/Androidクライアントの公開を行いました。ほぼ1年がかりの開発だったのですが、クライアント側で最も大変だったのがエディタの開発でした。この記事では LINE BLOG のエディタの根幹を支えている Workaround について解説します。普段は Swift を書いていて、ほぼその話しかしていないのですが、今回は HTML と JavaScript の話になります。

    LINE BLOG contenteditable JavaScript

    もっと見る

  • Front-end Developer’s Workshop を開催しました
    Otsuki Tomoaki 2017.04.21

    Front-end Engineer

    こんにちは! UIT(User Interface Technology)エンジニアのTomoakiです。

    UITはLINEの様々なプロダクトで利用されるWebフロントエンドの技術を支えるチームです。昨今フロントエンドに求められることやできることはどんどん増えており、UITでも日々様々なブレイクスルーがなされています。

    そこで、各プロダクト・各エンジニアによって培われた技術や知見を改めて共有しよう! ということで、東京・福岡・韓国・台湾のUITメンバーが一堂に会し、2日間にわたるWorkshop(Technical Conference)を開催しました。今回はその様子をご紹介します!

    UIT workshop

    もっと見る

  • SwiftでElmを作る
    Inami Yasuhiro (Inamiy) 2016.12.09

    関数型プログラミングが好きな、LINEのiOSエンジニアです。

    この記事は、LINE Advent Calendar 2016の 7日目の記事です

    こんにちは、開発1センター・開発2室の 稲見 (@inamiy) です。 普段はiOSエンジニアとしてSwiftを書いていますが、最近はもっぱら関数型プログラミング全般に興味があります。

    今日は、「SwiftでElmを作る」というテーマで、お話しさせていただきます。

    Elmって何?

    Web向けの静的型付け・関数型プログラミング言語です。詳しくは http://elm-lang.org をご参照ください。

    簡単に言うと、「Haskell + React.js + Redux」です。コンパイル時に、JavaScriptに変換されます。

    さっそく、簡単なボタンカウンターの例を見てみましょう。

    import Html exposing (beginnerProgram, div, button, text) 
    import Html.Events exposing (onClick)
    
    -- `main`関数 = プログラムの始まり。 
    -- 初期状態(model)に`0`をセット + 以下にあるview関数、update関数をセット。 
    main = 
      beginnerProgram { model = 0, view = view, update = update }
    
    -- `view`関数 = モデル(状態)からビュー(Virtual DOM)を生成。 
    -- プログラムがメッセージを受け取る度に呼ばれる。 
    -- ユーザー入力(onClick)等の度に、プログラムにメッセージが送られる。 
    view model = 
      div [] 
        [ button [ onClick Decrement ] [ text "-" ] 
        , div [] [ text (toString model) ] 
        , button [ onClick Increment ] [ text "+" ] ]
    
    -- `Msg` = メッセージ型。今回は2つのパターンだけ定義。 
    type Msg = Increment | Decrement
    
    -- `update`関数 = 状態遷移関数。 
    -- 「メッセージ」と「現在の状態」を引数に、「新しい状態」を返す。 
    -- プログラムがメッセージを受け取る度に呼ばれる。 
    update msg model = 
      case msg of 
        Increment -> 
          model + 1
    
        Decrement ->
          model - 1
    

    AdventCalendar Elm Swift

    もっと見る