RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

Laravel JP Conference 2019 に登壇します&協賛します

こんにちわ @kawanamiyuu です。来月開催される Laravel JP Conference 2019 に弊社から 2 名のエンジニアが登壇することになりましたのでお知らせします。また、株式会社ラクスは BRONZE スポンサーとしてイベントに協賛しています。

イベント概要

conference2019.laravel.jp

登壇情報

タイムテーブルはコチラ

チャットディーラーの高速開発を支える Laravel

  • レギュラートーク(14:40 〜 15:10)
  • 発表者:坂田晃平

10年以上PHPでノンフレームワークで開発・運用されてきた主力サービス(メールディーラー)の開発チームが、新規に姉妹サービス(チャットディーラー)を立ち上げる際にLaravelを選択をしました。 開発期間半年というスピードが求められる中で、チームがLaravelに抱いた理想と現実、また、Laravel(Blade)とVue.jsの組み合わせによる脆弱性への対応など、Laravelでの新規サービス立ち上げの経験を具体的にお伝えします。

昨年の PHP カンファレンス関西 2018 で発表した内容の再演です。

電撃:Laravel API クイズ

  • ライトニングトーク
  • 発表者:加納悠史

「Laravel は便利」「Laravel で開発速度が上がる」とは、よく聞くセリフですが、我々はどこまで Laravel を使いこなせているのでしょうか。 Laravel ビギナーがドキュメントを読み漁って掘り当てた、Laravel のニッチな便利機能/便利関数をクイズ形式で紹介します。目指せ!全問正解!!

どんなニッチな機能を掘り当ててくるのか楽しみです!

まとめ

昨年夏の PHPカンファレンス関西 2018、先月の PHPカンファレンス 2018 に続いて PHP のイベントへの登壇が立て続けに決まって非常に嬉しいです。株式会社ラクスは今後も PHP コミュニティへのコミットを推し進めていきます。

若手がコードレビュー専任担当になった話

はじめに

id:d_shr です。
MailDealer開発チームでコードレビューを担当しています。
去年の4月からコードレビュー担当になり1年が経とうとしているので、若手(新卒2年目)がコードレビューをやって良かったこと、難しかったことなどを振り返ってみようと思います。

コードレビューとは

一言で言えば、書いたコードを他の人にレビューしてもらうこと。
主に以下について確認します。

  • コード規約違反がないか?
  • 保守性の低いコード、冗長なコードになっていないか?
  • コードミスがないか?
  • 仕様通りのコードになっているか?

コードレビュー担当をしていて良かったこと

① コードを読む力がつく

元々コードを読むことには自信がありましたが、ここ1年でかなりのコードを見たので、さらに自信がついたかなと思っています。
いろんな人が書くコードを読むので、読む力はかなりつきます。

② レビュワーの観点がつく

コードを書くときに、良いコードを書かなきゃと可読性を意識しますよね。
コードレビューをするようになってから実装をするときに、「このコードを自分がレビューするとしたら…」という視点が持てている実感あり、良いコードが書きやすくなっている自覚があります。
レビュワーとして指摘しているようなミスはできないし、書いた段階で気づけるので、効率よくコードが書けるようになった気がします。

③ 指摘が自分に返ってくる

②と繋がる話ですが、指摘した内容が自分に刺さることは少なくありません。
「偉そうに指摘したけど、人のこと言えないなぁ…自分がコード書くときは気をつけないと。」
みたいな感じです。
このようなことも含めて自分の成長に繋がっています。

④ 他の人が書くコードが読める

他の人のコードを読むことはすごく参考になります。
自分よりもエンジニア歴が長い人たちのコードが読めるので、「こういう書き方もあるんだ」と参考になることが多いです。

⑤ いろんな機能の仕様、中身を把握できる

コードレビューを行うためには最低限仕様を把握している必要があります。
開発中の機能の3〜4割程度のコードレビューを担当していますが、その分だけ仕様を把握することができています。
開発中によくわからないエラーに直面したときはいろんな機能を把握できているおかげで解決が早い事が多いです。

コードレビュー担当をしていて難しかったこと

① 指摘を出す

ベトナムの開発メンバーが書いたコードをレビューすることがほとんどです。
顔を合わせて話ができない、日本語で説明できない相手に指摘をすることになります。
指摘を返すときに、理由を明確にして相手が納得できるような指摘を返すことを心がけていますが、言語の壁があったり、指摘したことに実は意図があったりと最初は難しかったです。

② ついでに直して欲しいを指摘で返してはいけない

修正したことに関連して既存でイケてないコードがあると、ついでに直して欲しいと思うことがあります。
修正すべきなので良かれと思って指摘として伝えると、コードを書く人は不満を持ってしまうことがありました。
指摘ではないけど修正してほしいという意図をしっかり伝えて、コードを書く人に不満を持たせないように心がけています。

③ コード規約に載っていない暗黙のルール

コード規約や正しく書いていることを確認するチェックリストなどのドキュメントはありますが
どこにも書かれていないけど、こういうコードは良くないみたいな観点はあると思います。
「こういう書き方はしてほしくない」、「この場合はこういう書き方をしてほしい」、「この関数はこういう使い方をしてほしい」…etc
そういったことを明確なルールにしていくことが難しいと思いました。
ルールになっていなかったものや、指摘が多かったことをまとめたドキュメントを作成してメンバーに展開しました。

まとめ

若手のコードレビューはオススメ

コードを読む力、読むことで参考になること、コードを書くときに活かせるなど
メリットがたくさんあり、成長に繋がることが多かったと思います。
出した指摘から自分の意識と高めることができたり、レビュワーの視点が身についたり良かったことが多かったです。
コードが読めて、ある程度実装ができるなら、どんどんコードレビューを積むことは良いことではないかと思いました。

コードレビュワーが指摘するときに気をつけるべきこと

難しいと思ったことから簡単にまとめると…

  • 問題を明確にする
  • 理由を明確にする
  • 修正方法を明確にする
  • どういう観点なのか?
  • 参照すべきドキュメントがあるなら記載する
  • 指摘ではなくついでに直して欲しいことは明確に
  • 怪しいコードを見つけたら書いたコードの意図を聞いてみる

最後に

今後もコードレビュー担当を通して、成長できればと思っています。
品質向上にも貢献できるようにコードレビュー担当の観点でできることをやっていきたいと思います。

ScrollViewでAndroidアプリの画面スクロールを実現させる

kuwa_38です。先日SQLiteを使ったAndroidアプリを作成していたのですが、表示データが多くなると画面外に表示されるため対策が必要だなと考えていました。 この記事ではScrollViewを使って特定領域内をスクロール可能にする方法をご紹介します。

今回作成するアプリと過去の記事

今回ScrollViewによりスクロールを導入するアプリを紹介します。簡単に言うとSQLiteを用いてDB内のデータを表示するアプリです。今回はそのアプリで表示するViewにスクロール機能をつけることがゴールです。

qiita.com

scroll

ScrollViewを導入して特定領域内をスクロール可能にする

画面レイアウト用のxmlにおいて、スクロールをさせたい範囲をScrollViewで囲むと、その範囲をスクロールさせることができます。

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="200dp"
        android:id="@+id/scrollView">
       <!-- スクロールさせたいTextView -->
        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="「表示」を押すとDBのデータを全件表示します" />
    </ScrollView>

(注意1)画面のレイアウトが崩れる

ScrollViewで要素を囲む」。これだけでいいのですが、注意点があります。1つは画面のレイアウトが崩れることがあることです。文字入力しようとするとキーボードが出てきた際にレイアウトが崩れてしまいます。

レイアウト崩れ

注意1の解決方法

ScrollViewandroid:isScrollContainer="false"を追加することで解決できます。下記のサイトによると isScrollContainerIMEが表示されたときにスペースを空けるためにViewをリサイズするかどうかを指定するものだそうです。

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="200dp"
        android:isScrollContainer="false"
        android:id="@+id/scrollView">
       <!-- スクロールさせたいTextView -->
        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="「表示」を押すとDBのデータを全件表示します" />
    </ScrollView>

retrocatsoft.blogspot.com

(注意2)複数要素を指定したい場合

2つ目はScrollViewは1つの要素しか指定できないことです。 実際、下記のように要素を追加すると、エラーが発生します。

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="200dp"
        android:isScrollContainer="false"
        android:id="@+id/scrollView">
        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="「表示」を押すとDBのデータを全件表示します" />
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2つ目のTextView" />
    </ScrollView>
# consoleのエラー
...(略)
...ScrollView can host only one direct child

注意2の解決方法

LinearLayoutで指定したい要素を囲みScrollViewで指定する要素をLinearLayoutの要素1つとすることで解決できます。

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="200dp"
        android:isScrollContainer="false"
        android:id="@+id/scrollView">
        <LinearLayout
            android:id="@+id/LinearLayout"
            android:orientation="vertical"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent">
            <TextView
                android:id="@+id/text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="「表示」を押すとDBのデータを全件表示します" />
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2つ目のTextView" />
        </LinearLayout>
    </ScrollView>

複数要素のスクロール

おわりに

今回はScrollViewを使って特定領域をスクロールさせる方法をご紹介しました。最初はScrollViewで囲むだけなので簡単だと思っていましたが、レイアウト崩れや要素の制限などやってみると思いの他詰まり奥が深い(というか自分が知らないことが多い)なという印象です。 今後もAndroidアプリ開発は続けるつもりなのでこういった記事を書いていこうと思います。


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

エンジニアブログに携わって知った「学び続けること」の大切さ

f:id:rs_tukki:20181225105744p:plain

はじめに

こんにちは、@rs_tukkiです。メリークリスマス!
というわけで、この記事はラクス Advent Calendar 2018の最終日の記事です。

qiita.com

エンジニアとして働き始めて2年も経っていない私ですが、実は去年の10月からエンジニアブログの運営という大任を仰せつかっています。
最後の記事では、1年以上もの間このブログに中核から携わって気づいた「エンジニアが学び続けることの大切さ」について記事にしたいと思います。

エンジニアは勉強しなければいけないのか?

エンジニアという仕事をするにあたって、よく聞く言葉があります。

「エンジニアは、常に学び続ける必要がある」

正直、去年の今頃は、あまりこの言葉を信じてはいませんでした。
自分から社外の勉強会やカンファレンスに行くこともありませんでしたし、ブログの記事も最初にひとつ書いて終わりでした。「別に勉強なんかしなくても何とかなるんじゃない?」と心のどこかで感じていた気がします。

「知識を吸収すること」の大切さ

ですが、今年1年、ブログの運営、あるいは執筆を続けていくうちに、社内に閉じたままではなく、社外に出て知識を得ることの大切さをひしひしと感じるようになりました。


運営として

ブログの運営は、寄稿してもらった記事のチェック、投稿、アクセス数の集計などが主な仕事です。
この一年、ラクスのエンジニアの方々の記事を見てきましたが、皆さん本当に様々な知識を持っているな、と実感しています。

Google Homeがブログの記事タイトルを読み上げるアプリを作って公開した話 - RAKUS Developers Blog | ラクス エンジニアブログ
「openSUSE」で始める初めてのLinuxデスクトップ - RAKUS Developers Blog | ラクス エンジニアブログ
新人がDockerを学習すべき4つの理由 - RAKUS Developers Blog | ラクス エンジニアブログ
Android Studioで天気情報を表示するアプリを作ってみた - RAKUS Developers Blog | ラクス エンジニアブログ
5分で理解する!Google Apps Script超入門 - RAKUS Developers Blog | ラクス エンジニアブログ
Dockerのコンテナ間通信~アプリとDBを繋ぐ~ - RAKUS Developers Blog | ラクス エンジニアブログ

業務に関係することだけでなく、新しい知識を積極的に取り入れている方が非常に多いです。
そしてどの方もそれを1回で終わらせず、習慣にしていることが素晴らしいと思います。Advent Calendarは募集したそばからどんどん埋まっていきました(自分は囲い込まれた側)し、社内チャットの技術チャンネルは毎日様々な話題で盛り上がっています。
そういった「勉強を推奨する風土」が、ラクスの成長の一端なのではないかと感じています。


執筆者として

運営としてエンジニアブログに携わるだけではなく、私自身も記事を書く機会が結構あり、(この記事を除いて)全部で7本の記事を書かせていただきました。

新卒1年目が新卒0年目に贈る、5+1冊の「エンジニア虎の巻」 - RAKUS Developers Blog | ラクス エンジニアブログ
Node.jsの勉強会でお手軽にWebアプリを作った話 - RAKUS Developers Blog | ラクス エンジニアブログ
自由度抜群!コスト削減!「ハイブリッドアプリ」の仕組みと「Monaca」で作るスマホアプリ - RAKUS Developers Blog | ラクス エンジニアブログ
VagrantとDockerで「環境に縛られない」開発環境を構築しよう - RAKUS Developers Blog | ラクス エンジニアブログ
【新卒向け】説明力向上の虎の巻!?『Lightning Talks』のススメ - RAKUS Developers Blog | ラクス エンジニアブログ
振り返りの手法を理解しよう~KPT法編~ - RAKUS Developers Blog | ラクス エンジニアブログ
30歳以下限定の技術カンファレンス「Developers Boost」に参加してきました - RAKUS Developers Blog | ラクス エンジニアブログ

実は、このうち5本の記事が勉強会、あるいはカンファレンスで学んだ知識をもとに書いた記事です。
最初のころは、ただ何となく誘われたからとか、ブログの記事のネタになりそうだからとかで参加していた勉強会ですが、だんだんと知識をつけること自体が楽しくなってきて、最終的に1年間で30以上の勉強会に参加しました。

そして、そういった勉強会で身に着けた知識は、関係ないことに見えても業務で役立つことがあります。
先輩たちが話している内容が少しずつ分かるようになってきましたし、考える時間が増えたことで開発やテストも以前よりスムーズにできるようになりました。
また、自分と同年代のエンジニアがバリバリ活躍しているのを見て刺激になった、ということも多少なりあった気がしています。

来年に向けて

というわけで、今ならはっきりと主張できます。

「エンジニアは、常に学び続ける必要がある」

そして来年は、ただ学ぶだけではなく、それを伝える機会を更に増やしていきたいです。
既に先輩方の中にはカンファレンスで登壇した方もいまして、登壇への憧れが日々増している今日この頃。

この前登壇してた人にまたもインタビューしてみた - RAKUS Developers Blog | ラクス エンジニアブログ
PHP カンファレンス 2018 でライトニングトーク登壇してきました - RAKUS Developers Blog | ラクス エンジニアブログ

このブログで記事を書いたり、勉強会で登壇したりといった「学んだ知識をアウトプットする場」を増やして、周りのエンジニアにも学ぶことの大切さ、楽しさを伝えていければいいなと思っています!

おわりに

今年一年、ラクスのエンジニアブログを閲覧していただきありがとうございました。
来年以降は新卒のエンジニアを交えて、更に「学び続けて」いきたいと思いますので、どうぞよろしくお願いいたします!

PHP カンファレンス 2018 でライトニングトーク登壇してきました

こんにちは、@kawanamiyuuです。先日東京で開催された PHP カンファレンス 2018 でライトニングトーク に登壇してきました。PHP カンファレンスには毎年プライベートで参加していましたが、今回は登壇するということで会社に交通費を出してもらって参加することができました。会場近くのホテルに前泊できたので当日は朝ゆっくり寝れてありがたかったです。

イベント概要

phpcon.php.gr.jp

登壇内容

今年の夏に開催された PHP カンファレンス関西 2018 への登壇を業務として推進した取り組みの、その背景や具体的な施策について発表しました。

speakerdeck.com

www.youtube.com

所感

発表内容としてはレギュラートークでも十分な話せそうなボリュームだったため、少し駆け足な発表になってしまいましたが、動画を見返したところ案外ちゃんとしゃべれていて安心しました笑。ネタによりけりですが、次回はレギュラートークにも挑戦してみたいと思いました。

発表の中でもお話しましたが、今年は PHP カンファレンスをはじめとしていろいろ登壇や協賛に向けての提案や取り組みを行うことができました。開発組織としても個人としても大きな一歩はもう踏み出すことができたので、来年、さらに取り組みを活発化して周囲を巻き込んで進めていきたいと思っています。

JJUG CCC 2018 Fall に参加しました!!

f:id:FM_Harmony:20181217225430p:plain

はじめに

こんにちは、id:FM_Harmonyです。前回はPostgreSQLのターミナルコマンドであるpsqlについて、記事を作成しました。

tech-blog.rakus.co.jp

さて、先日12/15(土)に日本Javaユーザグループ(以下JJUG)が開催するカンファレンスである「JJUG CCC 2018 Fall」が開催されました。

http://www.java-users.jp/ccc2018fall/#/www.java-users.jp

休日を利用して参加してきましたので、今回は私が参加したセッションについて簡単に書いてみました。参加されなかった方にも会場の雰囲気など伝わりましたら嬉しいです。

  • はじめに
  • 各カンファレンスの感想
    • Pivotal認定講師によるSpring Framework 5.1ハンズオン!
    • IBM CloudとKubernetesでSpring Bootのマイクロサービスを簡単に!
    • 今こそStream API入門
    • Migration Guide from Java 8 to Java 11
    • オイラ大地の18年拡張し続けているECサイトをSpring Bootとk8s on Azureでマイクロサービス化する事例
    • Scala とマイクロサービスでつくる証券会社とスタートアップ
  • おわりに
  • おまけ
  • 参考資料
続きを読む

30歳以下限定の技術カンファレンス「Developers Boost」に参加してきました

はじめに

こんにちは、@rs_tukkiです。
先日、30歳以下エンジニアのための技術カンファレンス「Developers Boost」に参加してきました。

event.shoeisha.jp

登壇者も参加者もU30限定という中で、業務改善を行った話、最新技術の紹介をする話、エンジニアとしての生き方を考える話など興味深いセッションが多く、あまり知識のない私でも最後まで楽しむことが出来ました。(そういう人を狙ったセッションが多かったのかも…?)
というわけで、今回は参加報告も兼ねて印象に残ったセッションを簡単にまとめていこうと思います。

印象に残ったセッション

U30エンジニアとしての技術的投資戦略


ペッパーのプログラムを組み人間との漫才コンビM-1に出場したという異色の経歴を持つ安野 貴博さんのセッションです。
30歳以下の若手エンジニアとして、私たちにはどのような武器があるのか、そしてどのように生きていくべきか、という最初からとても考えさせられるセッションでした。
若手エンジニアの武器は2つ。

  • リスクを取りやすい
  • 時間的リソースを投入しやすい

そのため、成長している領域に対して勉強を重ね、勝負していける。失敗してもやり直しがきく。
そして、その「成長している領域」が何かを知るために、未来を予測し、備え、出てきた選択肢を定量比較した上でベットしていく…
エンジニアは常に勉強しなければ生き残れないとはよく言いますが、ただ闇雲に進むのではなく、どんな未来に賭けるかを意識しよう、という話自体が非常に勉強になりました。

Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力


日本Kotlinユーザグループの代表を務められている、長澤 太郎さんのセッションです。
こちらは、スライドが公開されていました。

speakerdeck.com

Androidの開発の現場でKotlinという言語はよく聞きますが、発表が2011年、安定版は2016年のリリースということで、想像以上に最近出てきたばかりの言語なんだと実感しました。
Javaと同じ静的型付けオブジェクト指向言語で、Javaとの相互運用性がありながら、Javaより記述が容易だったり、演算子オーバーロード出来たりと、かなり便利に扱えるなと感じました。(感覚的にはC#に近いかも? とも思いました)
あとWebアプリケーションにも使えるのがちょっと意外でした。

ID連携を用いたサービス間連携とQR決済サービスPayPay


こちらもスライド公開済み。
ヤフーの本間 洋光さんによる、今話題のPayPayの仕組みに関するセッションです。

www.slideshare.net

丁度他の勉強会でOAuthについて学ぶ機会があったのですが、その時はまだ完全に理解しきれていないところがありました。
今回のセッションではPayPayのシステムを例に、(OAuthを拡張した)OpenIDConnectという仕様を使った連携フローについて説明 いただいたので、より理解が進んだ気がします。
ちなみにヤフーには連携のためのIDに関わる開発専門の部隊が存在するそうです。流石...

大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜


ディライトワークス株式会社の畠山 彰秀さんのセッションです。
大規模な開発プロジェクトの中で、他の人のサポートという「見えないタスク」への対処でスケジュールが押されないよう、画面仕様や導入資料などの様々なドキュメントを作成していった、という話でした。
弊社でも私たち若手メンバーを交えて既存の資料を改善していく努力はしていますが、「大事なのは誰かを待つのではなく、まずやってみること」という言葉が胸に刺さりました。
今後新たなメンバーがアサインしてきたときにドキュメントが整備されているか否以下の差は大きいので、気づいたらやる、という点は徹底していきたいです。

課外活動で勉強会を主催していたら会社の事業になった話


IoTLTという勉強会の主催である菅原 のびすけさんのセッションです。
主催していた勉強会のモチベーションが下がっていたところに社長を呼んでみたら、とんとん拍子で事業化まで事が運んでしまった…
という話でしたが、何より「モチベーションがなくても続ければ価値になる」という言葉が響きました。
ひたすらアウトプットを続けていくことで、いずれそれに価値を見出せることができるということで、来年からは積極的にブログなどの技術発信を続けていこうと感じました。

おわりに

通常のカンファレンスや勉強会では、登壇者も年上の方が多いのですが、今回はU30という関係上、非常に近い立場の方の話を聴くことが出来ました。(私と同い年で登壇されている方も!)
社内に限らず、こういった社外での勉強会や交流の場で学べることはとても多いので、皆さんもぜひ参加してみてはいかがでしょうか?

Copyright © RAKUS Co., Ltd. All rights reserved.