コネヒト開発者ブログ

コネヒト開発者ブログ

AWS × slackを用いたDDL自動実行フローを構築しました

こんにちは!MLエンジニアの野澤(@takapy0210)です。

10月から軽減税率が始まりましたね。みなさんの身の回りで混乱は起きていませんでしょうか?
そんな中、軽減税率に関するこんな記事を見ました。専門家の人たちでも判断に困る事例があるようなので、難しいですね。

さて、本日はAWS × slackを使って、DDLの自動実行フローを構築した話をできればと思っています。

目次

DDLって何?

リレーショナルデータベースを対象として、テーブルなどの構造を制御することができる言語です。 「CREATE」「DROP」「ALTER」などが書いてあるアレです。

コネヒトでは、SchemafileでDBスキーマを管理することができるRidgepoleというツールを用いています。
このRidgepoleの実行環境はコンテナ化されており、AWS ECS上のサービスとして稼働しています。

従来のフロー

DBは開発環境(以下、dev環境)本番環境(以下、prd環境)に分かれており、dev環境での実行は開発者、prd環境での実行は権限のあるオペレーターに依頼して実行してもらう、というフローになっていました。

下記が詳細な手順です。

  1. local環境で開発(Schemafile)
  2. Github RepositoryにPR
  3. Githubでmaster merge(dev環境にECSデプロイが走る)
  4. 実行環境のインスタンスにSSHログイン
  5. dry-runでDDLの内容が合っているか確認(dev環境)
  6. dry-runの内容に問題がなければdev環境でridgepole(DDL)の実行
  7. 最新のコミットに対してタグをpush(prd環境にECSデプロイが走る)
  8. オペレーターに依頼し、prd環境でdry-runの実行
  9. dry-runの内容に問題がなければprd環境でridgepole(DDL)の実行

ごちゃごちゃ書きましたが、煩雑な雰囲気だけでも伝わって頂ければと思います。

今回は上記の 4, 5, 6, 8 の部分を自動化しましたので、次章以降で詳細をお伝えできればと思います。

新・自動化フロー

自動化のアーキテクチャは下記のようになっています。 dry-run実行フローとDDL実行フローの2パターンに分けて説明します。

dry-run実行

f:id:taxa_program:20191003172131p:plain
dry-run実行時

図を見ていただくと分かりやすいと思うのですが、ECRのimage更新を検知して、Step Functionisが起動し、Fargate Taskでdry-runスクリプトを実行し、結果をslackに通知してくれます。

slackへ通知するメッセージは、下記のようにdry-runの内容DDL実行の可否を問うボタンで構成されています。

f:id:taxa_program:20191003173000p:plain
dev環境のdry-run slack通知メッセージ

上記でdry-runの結果を確認し、問題なければOKボタンを押下するだけで、dev環境へのDDLが実行できます!めっちゃ便利!

ちなみに、prd環境のDDL実行はオペレーターが手動で行う運用としているため、dry-runの結果通知のみにしています。(実行時間帯や権限の関係で)

f:id:taxa_program:20191003184156p:plain
prd環境のdry-run slack通知メッセージ

次に、上記のslackメッセージでOKボタンを押下した後のDDL実行フローについてご紹介します。

DDL実行

f:id:taxa_program:20191003173408p:plain
DDL実行

slackメッセージのボタン押下イベントをAWS API Gatewayで受け取り、そこからLambda経由でStep Functionsを起動しています。
そしてFargate TaskでDDL実行スクリプトを実行し、結果をslackに通知します。

f:id:taxa_program:20191003174457p:plain
DDL実行結果のslack通知

自動化して何が嬉しかったか

DDL実行の都度、実行環境にSSH接続して、dry-runを実行して、結果を確認して、、、という手順が省略されたことが大きいと思います。

また、prd環境で実行する際は

  • オペレーターがdry-runを実行して
  • 開発者に対して、dry-runの結果に誤りがないか確認して
  • 同意がとれたら実行する

という手順を踏まなければならなかったのが、dry-runの結果は自動的にslackに通知されるので、都度開発者にdry-runの整合性を確認する必要がなくなりました。
そして、dry-run結果のメッセージに返信する形で「prd環境で実行お願いします!」と一言伝えるだけでOKになったのも、作業負荷の軽減に繋がっていると思います。

実際に、煩雑だった従来の手順が

  1. local環境で開発(Schemafile)
  2. Github RepositoryにPR
  3. Githubでmaster merge(dev環境にECSデプロイが走る)
  4. 実行環境のインスタンスにSSHログイン
  5. dry-runでDDLの内容が合っているか確認(dev環境)
  6. dry-runの内容に問題がなければdev環境でridgepole(DDL)の実行
  7. 最新のコミットに対してタグをpush(prd環境にECSデプロイが走る)
  8. オペレーターに依頼し、prd環境でdry-runの実行
  9. dry-runの内容に問題がなければprd環境でridgepole(DDL)の実行

下記のように省略されました。

  1. local環境で開発(Schemafile)
  2. Github RepositoryにPR
  3. Githubでmaster merge(dev環境にECSデプロイが走る)
  4. slackでdry-runの実行結果を確認し、メッセージ内のボタン押下でDDL実行
  5. 最新のコミットに対してタグをpush(prd環境にECSデプロイが走る)
  6. slackでdry-runの実行結果を確認し、問題が無ければオペレーターにridgepole(DDL)の実行を依頼

また、従来はEC2バックエンドだったため、常にインスタンスが起動している状態でしたが、今回はFatgate Taskで実行しているため、コストの観点からも恩恵を受けることができそうです。

アーキテクチャ構築のポイント

上記フローを構築する際の注意点をいくつかあげてみます。

Step FunctionsでFatgate Taskを実行するときの注意点

セキュリティグループを正しく指定する必要がある

Step Functionsの定義でセキュリティグループを設定しないと、デフォルトのセキュリティーグループが自動で割り当てられる(?)ようなので、想定するセキュリティーグループを指定する必要があります。

下記に例を載せておきます。

...
"States": {
    "Fargate task": {
      "Comment": "Fargate taskの実行",
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.sync",
      "Parameters": {
        "LaunchType": "FARGATE",
        "Cluster": "arn:aws:ecs:ap-northeast-1:12345678:cluster/cluster-name",
        "TaskDefinition": "arn:aws:ecs:ap-northeast-1:12345678:task-definition/task-name:1",
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
            "SecurityGroups": ["sg-id"],
            "Subnets": ["subnet-id"],
            "AssignPublicIp": "ENABLED"
          }
        }
      }
...

EcsTask実行ポリシーに、「タスクを実行するRoleにアクセスする権限」を追加する必要がある

Step Functionsに付与するIAMロールに、EcsTask実行ポリシーを追加する必要があるのですが、自動的に追加されるポリシーには、EcsTaskを実行するRoleにアクセスする権限が付与されません。(これがないとFargate Taskが実行できません)

なので、下記のようにタスクロールタスク実行ロールの2つのロールに対するアクセス権限を、Step FunctionsのIAMロールに追加する必要があります。

...
{
    "Effect": "Allow",
    "Action": [
        "iam:GetRole",
        "iam:PassRole"
    ],
    "Resource": [
        "arn:aws:iam::12345678:role/EcsTaskRoleName",
        "arn:aws:iam::12345678:role/EcsTaskExecutionRoleName"
    ]
}
...

slack apiとAWS API Gatewayの連携の注意点

ここが一番大変でした・・・
ネットにもあまり情報がないので、トライ&エラーを繰り返し、なんとか実装できました。

API Gatewayの設定

まず、AWS API GatewayでREST APIを作成します。
今回はLambdaを呼び出すので、下記のように指定します。

f:id:taxa_program:20191004172039p:plain
POSTメソッドの作成

すると下記のようなAPIが作成されます。

f:id:taxa_program:20191004172335p:plain
API作成例

次に、アクションボタンからAPIをデプロイします。

f:id:taxa_program:20191004172530p:plain:w400
APIのデプロイ

すると、下記のようなURL(エンドポイント)が取得できます。
このURLは、後述のslack APIを作成する時に必要になりますので、メモしておいてください。

f:id:taxa_program:20191004172803p:plain
API Gatewayのエンドポイント

slack APIの作成

slack APIは、slackメッセージ内のDDL実行ボタンを押下したタイミングでAPI Gatewayを呼ぶ時に必要となります。

下記に手順を示します。

1. こちらからslackAppを作成する

f:id:taxa_program:20191007103217p:plain:w400
slack Appの作成

2. Interactive Componentsの設定
AWS API Gatewayを作成したときに取得したエンドポイントを設定します

f:id:taxa_program:20191007103457p:plain:w400
Interactive Componentsの設定

3. OAuth & Permissionsの設定
まず初めに、Tokenを取得します。ここで取得したTokenは、AWS Lambda → slackに下記のようなボタン付きメッセージを投稿する際に使用します。

f:id:taxa_program:20191003173000p:plain
ボタン付きメッセージ

Tokenの取得

f:id:taxa_program:20191007104505p:plain:w500
Tokenの取得

ちなみにLambdaからは下記のようにTokenを設定してリクエストを投げます。

def sample(event, context):
    
    attachments = [{
        'text': 'dry-runの結果はいかがでしょうか? \n問題なければ「OK」ボタンを押下してDDL実行してください。',
        'callback_id': callback_id,
        'attachment_type': 'default',
        'actions': [{
            'name': 'done_yes',
            'text': 'OK',
            'type': 'button',
            "confirm": {
                "title": "Are you sure?",
                "text": "DDLを実行してもよろしいでしょうか?",
                "ok_text": "Yes",
                "dismiss_text": "No"
            }
        },
        {
            'name': 'done_no',
            'text': 'Cancel',
            'type': 'button',
            "style":"danger",
            "confirm": {
                "title": "Are you sure?",
                "text": "DDLの実行をキャンセルしてもよろしいでしょうか?",
                "ok_text": "Yes",
                "dismiss_text": "No"
            }
            
        }]
    }]

    payload = {
        'token':※ここにTokenを設定※,
        'channel': SLACK_CHANNEL,
        'username': username,
        'icon_emoji': icon_emoji,
        'attachments': json.dumps(attachments)
    }

    res = requests.post(post_url, data=payload)
    return res

最後に、然るべきPermissionを設定し、対象のチャンネルに今回作成したAppをintegrationとして追加すれば終了です!

まとめ

今回はDDL自動実行フローの構築ということで、DevOps的な取り組みについてご紹介しました。

このフローに関しては、構築に少し手間がかかりますが、一度構築してしまえばそれ以降半永久的に恩恵を受けることができます。
もし同じような悩み・課題を感じている方がいれば、一度試してみてはいかがでしょうか。

We are Hiring !

コネヒトでは、成長中のサービスを一緒に支えるために働く仲間を探しています。 少しでも興味をもたれた方は、是非気軽にオフィスに遊びにきていただけるとうれしいです!

www.wantedly.com

#builderscon tokyo 2019 で当日ボランティアスタッフをしてきました

こんにちは!2019年7月にサーバーサイドエンジニアとして入社しました @takoba_ です!!

だいぶ遅くなりましたが、先月末に開催されました「builderscon tokyo 2019」に当日ボランティアスタッフとして参加してきましたので、そのレポートをします。

昨年から当日スタッフとして参加するようになりましたが、カンファレンススタッフとして参加するカンファレンスは一味違う楽しみ方ができるのでオススメです!そんな魅力が伝わるとうれしいです...!

"builderscon tokyo 2019" とは?

©️builderscon
©builderscon

buildersconでは毎年、他のカンファレンスでは聴けないようなトークが多くエントリーされています。過去にはサウンドエンジニアリングをテーマとしてセッションで、楽器(エレキギター)を持ち込んでデモを披露したスピーカーの方もいらっしゃいました...!

buildersconは、「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭りです

buildersconではトークに関して技術的な制約はありません。特定のプログラミング言語や技術スタックによるくくりも設けません。必要なのは技術者達に刺激を与えワクワクさせてくれるアイデアのみです。

builderscon tokyo 2019

今年は、 2019/08/29 〜 2019/08/31 の3日間、東京・北千住にある東京電機大学(東京千住キャンパス)1号館にて開催されました。立派なキャンパスだった...!

カンファレンススタッフをやると一味違う楽しみ方ができる!

カンファレンススタッフとしてカンファレンスに参加すると、参加者とはまた違った楽しみがあります。

まず、カンファレンスの裏側を気軽に覗くことができます。 自分が普段参加してるカンファレンスが「なるほど?こうやって運営されてるのね??」という部分が知れたりするのは、学びあるな〜〜〜と参加するたびに思います。
同じカンファレンスでも、以前実施した際の振り返りをもとにアップデートされている箇所があったりしますし、"ビジネス"としてのカンファレンスが垣間見えたりするのも、運営側に回ったことで得られる情報だったりするので、もし興味のある方は是非ともカンファレンススタッフをやってみてほしいと思います...!

また、一緒にスタッフをやった方々ともたくさん交流できたのは楽しかったです!スタッフとしてカンファレンスに関わっている方は、だいたい同じ属性を持っている方々なので話題も多様にありますし、終わった後にたびたび飲みに行ったのもよい思い出です。

ちなみにコネヒトでは、カンファレンス参加が業務扱いになります!!! [PR]

「カンファレンススタッフ業も業務扱いになりますか...?」と恐る恐る上長に聞いてみたら「なります!!」と二つ返事でお答えいただきました!

また、コネヒトは積極的にカンファレンスへのスポンサードもしております。当ブログにもたくさんの参加エントリがありますので、お時間ある時に見てみてください〜〜

当日スタッフはどんなことをやるのか

そんな魅了たっぷりなbuilderscon当日スタッフですが、具体的にはどんなことをやるのでしょう。その一部を、以下で簡単にご紹介します。

会場設営 / 撤収

©️builderscon
こういったホールに椅子と机を敷き詰めたりするお仕事です ©builderscon

お貸しいただいた会場を、カンファレンス実施するための状態に模様替えします。今回は広いホールを3部屋に分割するかたちで椅子や机をレイアウトしたりしてました。

また、今回は主催者の趣味によって、すっごいでかい"移動式9面サイネージパネル"が設置されました。こいつの搬入と組み立てがなかなか大変だった...。その分、完成して最初に映ったときに謎の達成感があっておもしろかったです。

各部屋の運営

©️builderscon
ホールを仕切って各部屋に変換したあとの図 ©builderscon

"部屋"とは、各種トークが開催される会場のことを指します。各部屋には、だいたい4-5名程度の担当スタッフを配置して、以下のようなことをしてました。

  • 会場設営
    • プロジェクター、タイマー、マイクetc. のセットアップ/動作確認
  • 司会/会場内アナウンス
  • マイクランナー(質問したい方へマイクを持っていく係)
  • 録画用ビデオカメラの監視
    • ブレた映像が残らないよう、人がぶつからないように注意します
  • 会場内整理
    • トークが終了するたびに参加者のみなさまの出入りが発生します
    • 部屋の動員状況によっては、心苦しいですが入場制限をしたりもしてました

ぼくは今回部屋担当になったんですが、4-5名で回していればシフトを組んで自分が観たいセッションの時には抜けられるようにすることも可能です。
(とはいえ、たまたま割り当てられた部屋が聴きたいセッションばかりで構成されてたので、ほぼほぼ自分の担当する部屋にいた気がします。)

ちなみに、初めてスタッフとして参加しても、丁寧なマニュアルが用意されていたり、"部屋番長"と呼ばれる歴戦の猛者がサポートしてくれるので安心です。

ノベルティ仕分け、配布準備

©️builderscon
ノベルティは受付でお渡ししてました! ©builderscon

来場する皆さまへお渡しするノベルティ*1が大量に届くので、それらを仕分けたり配布可能な状態にして受付に配置したりします。

昨年はチラシやパンフレットなど一部のものがバラバラに届いていたので、人海戦術でそれらを配布可能な状態にセットアップする作業が発生してましたが、今年はすでに配布可能な状態で届けられていて進化を感じました...!

おわりに

いかがでしたか?カンファレンススタッフやってみたくなりませんか???

個人的には、割と歴史が長いbuildersconのスタッフはカンファレンススタッフデビューするのにオススメだと思っています!興味のある方は、例年6月末くらいから募集し始めますので、buildersconのTwitterアカウントをフォローしてお待ちください👀

そして...ようやく...ブログを書いたので...ぼくの「builderscon tokyo 2019」が終わりを告げたぞ...!(毎度のごとく遅筆なのなんとかしたい)

*1:トートバッグ、Tシャツ、個人スポンサー向けグッズetc.

PHPカンファレンス北海道2019に協賛&参加してきました!(資料まとめ)

こんにちは!サーバーサイドエンジニアの @fortkleです!
今回は、つい先日開催された「PHPカンファレンス北海道」にCTOと2人で参加してきたのでレポートしたいと思います。

PHPカンファレンス北海道2019

2019年9月21日(土)に札幌で開催された「PHPカンファレンス北海道2019」。
前回開催が2016年だったので約3年ぶりの開催だったようです。

今回、縁あってシルバースポンサーとして協賛もさせていただきました。
コネヒトとしては、地方で開催されるカンファレンスに協賛するのはおそらく初めてで、PHPの技術コミュニティの発展に少しでも支援できたのであれば幸いです!

ちなみに、 コネヒトではメインプロダクトである「ママリ」を始めとして開発のメイン言語としてPHPを活用しており、フレームワークとしてはCakePHPを採用しています!

企業ブースとスポンサーセッション

f:id:fortkle:20190921103955j:plain
CTOと5周年記念PRキャラクター「ママリちゃん」

当日は1Fに企業ブースを出させていただきました。ブースまで来てくださった参加者の皆様、ありがとうございました!
「ママリ」は、特に男性にとってはほとんど接触機会がなく知名度も低いのですがそれでも「ママリ知ってます!」や「ペチコン東京で見ました!」というお声をちらほら頂けたのが非常に嬉しかったです!

f:id:fortkle:20190921161049j:plain
スポンサーセッション中のCTO伊藤

また、スポンサーセッションもさせていただきました。 当日のスライドも貼っておきます。

発表の中では、

  • ① なぜコネヒトはカンファレンスのスポンサーをするのか?
  • ② 技術コミュニティへの貢献を支援するための取り組み

という2点について紹介させていただきました。
2点目については、以前こちらのブログでも紹介した「ス・マイル制度」が取り組みの柱となっているのでもし興味がある方がいらっしゃいましたらご覧ください!

tech.connehito.com

当日のセッション

アンカンファレンス、懇親会LTを除くセッションについて、すでに公開されている資料をまとめてみたので参考にしてみてください! ※ 敬称略

最後に

主催の @makies さんを初めとした運営の皆様、登壇者の皆様、当日参加された皆様、本当にお疲れ様でした! 来年は通常セッションに弊社からも登壇者を出せるように頑張っていこうと思います!

余談

北海道といえばやっぱりラーメンですよね...
最高でした...

f:id:fortkle:20190920200107j:plain

味噌ラーメンも...

f:id:fortkle:20190922121030j:plain

カンファレンス終了後の懇親会では豪華な料理が振る舞われていました...

f:id:fortkle:20190921190119j:plain

北海道最高!!!また行きます!

iOSDC Japan 2019に行ってきました!

こんにちは、iOSアプリエンジニアのあぼ(@suxisuxido)です!

2019年9月5~7日に開催されたiOSDC Japan 2019に行ってきました。今年はダークモードの横断幕とパネルが用意されていたり、お茶会やiOSDCチャレンジといった新たな試みも追加され、進化したお祭りになっていました!

f:id:aboy_perry:20190911200700j:plain
ダークモードのパネル

コネヒトはシルバースポンサーと、Tシャツスポンサーとして協賛していたので、ノベルティを受け取るやいなやTシャツを袋から取り出し写真を撮ってはしゃぎました。

f:id:aboy_perry:20190912115131j:plain
ノベルティのTシャツ

本編となる各セッションの資料と動画は、公式のタイムテーブルから辿れる各プロポーザル詳細ページにリンクが貼ってあるので、そこから見ることができます。本ブログでは感想も交えながらいくつかのセッションをご紹介したいと思います。

Advanced Segue 2019年のSegue事情

Segueを使ったことがない私にとっては、Segueの使いかたや最新のSegue事情を一気にインプットするいい機会だったので聴きに行きました。

私は、Segueは画面遷移で利用するもの、と思ってしまっていたんですがそれは間違いで、実際にはperform()メソッドをオーバーライドすればそこでできることは全てできるので、自由度が高く可能性がある機能だな〜と感じました。Storyboard上でSegueを利用する際には接続先が必要で、例として空のStoryboard Referenceを置いて繋げるというやり方がセッションで紹介されていましたが、空のStoryboard Referenceを使うことのコスト感については、セッション後にスピーカーがつぶやいている内容が興味深いです。

iOSアプリのリジェクトリスクを早期に発見するための取り組み

リジェクトによる手戻りは大きく、またタイミングによっては休日に対応する必要があるため、できるだけ早期に発見したいところです。DeNAのSWETグループではReviewガイドラインをシステムに落とし込んで運用することで早期発見を実現しているとのことでした。システム化はもちろん、開発者からSWETグループへメモを送れるようにしてコミュニケーションコストを削減している点もすごいな〜と思いました。

また、最新のReviewガイドラインのキャッチアップ方法としては、コネヒトでもすでにhttps://developer.apple.com/news/を購読してslackに流すようにしていましたが、セッション内で紹介されていた「Reviewガイドラインのdiffを取る」という取り組みが結構手軽にできて良さそうなので、試しにマネしてみることに!

f:id:aboy_perry:20190911175358p:plain
社内情報共有ツールDocbaseに作ってみたReviewガイドラインページ

実機の管理とおさらば!AWS Device FarmでiOSのテストをしよう!

タイトルの「実機の管理とおさらば!」に惹かれて聴きに行きました。なぜテストを書くのか、どうやって書けばいいのかというところに触れつつ、最終的にAWS Device Farmを使った自動テストの運用方法がイメージできる内容になっています。

現実的には全パターンのデバイスを検証機として用意できない場合のほうが多いでしょうし、特定のOS、特定のデバイスでしか再現しない不具合を事前に検知するというのはなかなか難しく、例えばユーザーからの報告で気づいてもそのデバイスが無ければデバッグできません。セッションを聴いて、AWS Device Farmのようなアプリケーションテストサービスを使うことも選択肢のひとつだな〜と思えるようになりました。ちょうどまたAppleから新たなiPhoneが発表されましたし、iOS/Androidともにデバイスは本当にたくさんありますからね・・・。

1ヶ月半でプッシュ通知許諾率を17%から40%にあげた話

こちらはLTです。タイトルの時点で色々と仮説をたてて聴いていたんですが、結論は「起動直後に承諾ダイアログを表示する」というものすごくシンプルなものでした!

会場でもドカッと笑いが起きていて、私も笑ったのですが、これすごく学びがあるな〜と思っています。問題を解決するときに、その問題を無駄に複雑に考えてしまってはないかという切り口での考察も重要なのかもな〜と考えさせられました。

セッション以外にも楽しいことがたくさん!

セッション以外にも楽しいことがたくさんあって、例えば、お茶会のときにpixivの方からいただいたリジェクトに効く御守りは、早速チームのカンバンにぶら下げています。Androidアプリでも審査が入るようになったこともありますし、iOS/Android両方に効果があるといいなーと願っています!

f:id:aboy_perry:20190910152350j:plain
リジェクト除けの御守り

スポンサーブースも楽しくて、RoomClipで利用されているデザインガイドラインの写真を撮らせていただいて、社内のデザイナーに共有できたり。Uberが公開しているクロスプラットフォームアーキテクチャRIBsと、昨年のiOSDCで話題になったMicroViewControllerを組み合わせて本番運用している話を聞けたりしました!

それから、大学時代の先輩や、前職で一緒に仕事していた人と久しぶりに会って話すことができて、これもiOSDCの魅力だな〜としみじみ感じました。

おわりに

クロージングで主催者が「We are a community. We are not a school.」と言っていたのが強く印象に残っています。今年もこの楽しいコミュニティは関わる人全員で作られました。スタッフの方々、早稲田大学、スポンサーやスピーカーの方々、そして参加者のみなさんに感謝しています!

帰ってブログ書くまでがiOSDCでおなじみのiOSDCですので、本ブログの公開をもって私のiOSDCは終了です!ありがとうございました!

potatotips #64に参加・LTしてきました

こんにちは!エンジニアの柳村です。

2019/8/27に開催されたpotatotips #64 に参加・LTしてきました。

potatotips.connpass.com

今回の会場はReproさんでした。 代々木駅から出てすぐの好立地で、おしゃれな内装でしたよ(写真を取り忘れました・・

iOS関連の発表について簡単にレポートします。

Object指向でFatViewControllerをなくす

@coffeegyunyuさん

StoryboardにObjectを配置してViewControllerの代わりにこちらで処理をさせる方法についてでした。StoryboardのObjectってなんに使うのかあまりわかってなかったのですが、ようやく使い方が判明してすっきりしました。

コントロールセンターとたたかう

@5mingame2さん

ゲームの操作中にコントロールセンターがでてきちゃうのを防ぐ方法について紹介されていました。ブースでいろんな人に試遊してもらって想定外の操作がされていないか観察するという試みはとてもいいなと思いました。

Conditional Content in SwiftUI

@yanamura_

SwiftUIで条件によってViewを出し分ける方法となぜその方法だとうまくいくのかについてお話しました。 私の個人のブログのほうでも書いてますのでよろしければご参照ください。

ちなみにママリではまだSwiftUIは使ってませんが、移行していきたい気持ちです!

iPhoneでFeliCaを読み取ってみた

@tanakasan2525さん

いろんな種類のFeliCaの読み込みを簡単にするライブラリをつくられたそうです。FeliCaの読み込み使ったアプリを作るのが楽になる便利ライブラリのようでした。

DIKitで人間がクラス間の依存関係解決するのを終わらせる

@yuuxenoさん

DIKitで依存関係の実装コードを自動生成することについて紹介されていました。人の手で実装するとどうしてもミスはしてしまいがちなので自動化できるところは自動化していくというアプローチはとてもいいなと思いました。

SwagGenのススメ

@yuta24さん

<<資料は公開されたら反映します>>

OpenAPIで書いたAPI定義からSwagGenを使ってコードの自動生成について紹介されていました。swagger-codegenと比較してtemplateが良い感じのようでした。

macOS アプリを2年ぶりにメンテしたら原型がなくなった話

@AkkeyLabさん

個人で開発していたmacOSのアプリをFluxを採用したりAnalyticsを導入したりして書き換えた際のTipsを紹介されていました。Firebase AnalyticsがMacアプリには対応してないというのは意外でした。

Flutter Pluginを作る

@konyavicさん

ReproのSDKのFlutter対応版をつくられたときのtipsを紹介されていました。Cordovaとかと比べるとFlutterのpluginはとても簡単につくれるとのことでした。

さいごに

わたしは子育てがあって最近はなかなか勉強会に参加できないのですが、久しぶりに参加してLTしたり懇親会でいろんなひととお話したりできてとても楽しかったです!また、参加できないときもpotatotipsはLT資料をアップロードしてくださる発表者が多くてとても助かっています!

ここで突然のお知らせです!

なんと、きたる2020年2月には弊社コネヒトにてpotatotips #67が開催予定です!!!

ぜひLTしにきてくださいね!お楽しみに!!!

コネヒトはiOSDC Japan 2019に協賛いたします!

こんにちは、iOSアプリエンジニアのあぼ(@suxisuxido)です!

本日は、iOSアプリ開発者の祭典iOSDC Japan 2019に協賛するお知らせです。

コネヒトはiOSDC Japan 2019に協賛いたします!

iOSDC Japan 2019に、シルバースポンサーとTシャツスポンサーとして協賛いたします。Tシャツがどんな仕上がりなのか、今から楽しみでワクワクです!

iosdc.jp

スポンサーするにあたって、コネヒトは「人の生活になくてはならないものをつくる」というミッションを掲げているので、技術コミュニティについても同様に、サポートして一緒に盛り上げていくことができたら、と思っております。*1

イベント概要

  • 開催 2019年9月5日(木)~9月7日(土)
  • 場所 早稲田大学 理工学部西早稲田キャンパス63号館
  • 対象 iOSおよび関連技術のエンジニア
  • タイムテーブル https://fortee.jp/iosdc-japan-2019/timetable
  • 主催 iOSDC Japan 2019 実行委員会 (実行委員長 長谷川智希 @tomzoh ) / WASEDA-EDGE人材育成プログラム

iOSアプリ開発者の興味がわくような発表テーマが目白押しなので、チェックしてみてください。メインの発表だけでなく、9月6日(金)と9月7日(土)は、突然思いついたネタをその場で発表できるようなアンカンファレンスが開催されます。また9月6日(金)のLT終了後、よくあるアルコール片手の懇親会ではなく「茶会」という形で参加者同士が交流できる企画もあるそうです!楽しみです!

iOSDCトークンはこちら!

#コネヒトとiOSDC

iOSDCチャレンジで使うトークンです!すごく楽しそうな企画ですので、まだの方はチェックしてみてください。

iOSDCには私とiOSアプリエンジニアのyanamuraが参加予定ですので、会場でお会いした際にはぜひお話しましょう!

Kotlin Fest 2019に参加しました!

2017年11月にAndroidエンジニアとしてjoinした関根です! 2019年8月24日に開催されたKotlin Fest 2019に参加してきました! 今回の記事では、私が聞いた公演を感想をおりまぜて紹介させて頂きます。

f:id:katsutomu0124:20190827142731p:plain

弊社はスポンサーとしての参加に加え、改めて学ぶContractsという内容で弊社富田が登壇をさせていただきました。 余談ですが、スポンサー参加や登壇への弊社の意思の一端が現れたこちらの記事を是非とも合わせてお読みください!!

tech.connehito.com

オープニングセッション

さて、肝心のKotlin Festは、長澤太郎さんの挨拶とSvetlana Isakovaさんのオープニングセッションで幕が上がりました。

Svetlana IsakovaさんはJetBrains所属のエンジニアであり、世界で1番Kotlinに詳しい一人です。 そんな彼女からKotlinの新機能について紹介をしていただきました。 スライドを読み進めていくと、Contractsも紹介がありました。Contractsという機能は、富田の講演テーマでもあり、実際に当日はこのオープニングセッションでも言及しご紹介いただきました! Svetlanaさん誠にありがとうございました!!!

Kotlin コルーチンを理解しよう 2019

最初は、弊社でも今後の利用を検討しているCoroutineを理解するべく、八木俊広さんによる講演を聴講しました。

Kotlin Coroutineの基礎をわかりやすく解説していただいたことに加えて 設計の方針とCoroutineのテストのアプローチまで幅広くお話を聞けました。 特にCoroutineのテストはブロッキング処理が絡むこともあり、実践的なアプローチの内容が聞けて非常に学び深かったです。 八木さん、貴重なお話をありがとうございました!

改めて学ぶContracts

続いて、応援の為、富田の講演を聴きに行きました。

speakerdeck.com

本人はとても緊張をしていたようですが、蓋を開けてみれば非常に好評を頂き、会場には笑いが溢れており流石の富田という講演でした。 当日の登壇のために社内2回のリハーサルをして臨んだのですが、社内メンバーからのFBも反映されており、限られた時間の中で、最後まで手を抜かずに良いものを届ける富田の人柄を再認識しました。 ちなみに余談ですが、社内のランチイベントでは、Kotlin Fest当日の講演のように彼の話でメンバーは笑わせてもらっています。 トミーさん登壇お疲れ様でした!(社内ではトミーさんと呼ばれています)

サーバーサイドKotkinでGraphQLをやってみよう

続いて、弊社でも度々話題になるGraphQLについて学ぶべく、しらじさんによる講演を聴きに行きました。

speakerdeck.com

GraphQLの基礎からKotlinでの記述方法に加え、プロダクションで必要になる認証情報の扱い方など導入に到るまでのガイドラインのようなお話でした。 個人的に、印象的だったのが、GraphQLでのテストについてクラスを綺麗に分けることが前提なのでmockすればOKという結論が印象的でした! 聴講者を巻き込みながら、会場を盛り上げるしらじさんの講演は得るものが多く楽しく学ばせて頂きました。 しらじさん、貴重なお話をありがとうございました!

フロントエンドもKotlinで書きたい! -WebページをKotlin/JSで作った軌跡-

普段フロントエンドを触る機会が少ないので興味を持ち、にしこりさぶろ〜さんの講演を聴きに行きました。

speakerdeck.com

Kotlin/JSには無知識で参加したのですが、サンプルアプリをもとに解説していただいて丁寧でわかりやすい講演でした。 すでにKotlin/JSで2つのサイトを作られていて、導入する上での注意点などにも触れて頂き、非常に説得力の高いお話でした Kotlin/JSはまだまだ情報が少ないので、みんなでアウトプットして行こうというメッセージはコミュニティを活性化する大事なメッセージだと思いました。 にしこりさぶろ〜https://blog.hatena.ne.jp/connehito/connehito.hatenablog.com/edit?entry=26006613406773967#さん、貴重なお話をありがとうございました!

Kotlin/Nativeはなぜ動くのか

最後に、Kotlin1.3の目玉の一つと言えるKotlin/Nativeの中身を理解するために荻野陽太さんの講演を聴きに行きました。

speakerdeck.com

ネイティブバイナリに変換される過程をステップごとに解説するお話で、学問的な内容に感じておりましたが、丁寧に解説していただいたおかげでよく理解できました。 今回のお話の内容の理解が深まったことで、個人的な学びに加え、Kotlin/Nativeの様なプラットフォーム非依存の技術の知識を社内に持ち込めるきっかけを頂きました! 荻野さん貴重なお話をありがとうございました!

Kotlin Festに参加して感じたこと

その他、聴講以外の感想に触れて本記事を終了したいと思います。

スタッフの運営スキルが高い

まず感じたことはKotlinFestに関わるスタッフの運営スキルが高いことでした。 誘導が非常に丁寧で、会場の移動もスムーズに行うことができました。 また富田の登壇時もアテンドも非常に真摯にご対応いただきました。 スタッフの皆様、当日お疲れ様でした!ありがとうございました!

コミュニティ運営を愛している

クロージングの際に、主催の長澤 太郎さんから案内があり、Kotlinコミュニティの主催者を壇上にあげ、1分間のアピールを募るという時間がありました。 JKUG以外のKotlinコミュニティを盛り上げていこうと言う長澤さんのメッセージと、それを暖かく迎える参加者の皆様から、Kotlinとコミュニティを盛り上げていこうと言う愛を感じられた一幕でした。 長澤さんを初めとした主催の皆様と参加された皆様。当日はありがとうございました!

最後に

改めて、主催の長澤さんを初めとした運営の皆様、登壇者の皆様、当日参加された皆様、本当にお疲れ様でした! 次回は私も登壇をできる様に精進いたします!また来年よろしくお願いします!