GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

「Adobe MAX Japan 2019」で発表された激アツ最新トピック5選 【デザイナー独断】#GameWith #TechWith #DesignWith

GameWithアドベントカレンダー開催中!

qiita.com

今年も GameWith のいろいろな人が書いていくので楽しみにしててください!

今年も予想以上! Adobe MAX Japan 2019

f:id:fukiworks:20191205201633j:plain

こんにちは!GameWith デザイナーの Fuki です!普段はUIデザインをしたり、グラフィックも担当したりしています。

全デザイナー大歓喜、年に1度のお祭りであります Adobe MAX Japan 2019 に参戦してきました。

maxjapan.adobe.com

昨年、今年と2年連続で参加させていただいているのですが、今年もやっぱり...最高でした....!

UI/UX、グラフィック、ARなど、様々なデザインツールのほぼ魔法では?みたいなアップデート・開発・リリース情報が満載で、あっと言う間に1日が終わってしまいました。ありがとうAdobeさん!業務が捗って仕方ない!

グッズショップは大盛況のため購入出来ませんでしたが、参加でもらえるおみやげがウルトラ豪華で大変満足しました。同僚に配れてよかった!

f:id:fukiworks:20191205193101p:plain
可愛い貂明朝わんこマグとイラレ愛コースター

Adobe (個人的)激アツ最新トピックレポート

見逃してしまった方にお伝えしたいトピックが無限にあるんですが、その中から独断で厳選して5つ!簡単にまとめましたので振り返ってみたいと思います。

1 【Adobe XD】11月にリリースされた新機能「ステート」がすごすぎる

blogs.adobe.com

AdobeXDが、11月に「リアルタイム共同編集」「ドキュメント履歴」などの神アップデートをリリースしてくださいました。その中でも「コンポーネントのステート機能」がかなり凄かったので、紹介させてください!

これからは、特定のタブがアクティブであることを示したり、ユーザーがボタンをタップした状態を示すなど、あるUIパーツが異なるタイプのユーザーインタラクションに応じて変化した状態のすべてのバリエーションをひとつのコンポーネントに持たせることができるようになります。コンポーネントがステートに対応したことで、シナリオごとに別々のコンポーネントを作成する必要がなくなり、複数ドキュメントにまたがるコンポーネントの維持管理が容易になり、結果的にエクスペリエンスの構築に専念できます。

文章だけだと「???」って感じなのですが、 つまりXDだけで、そして1つのアートボードだけでこういうことが出来ます↓

f:id:fukiworks:20191205195525g:plain
アニメーションしまくり!

f:id:fukiworks:20191205195352g:plain
うにょうにょ動くインジケータ

このすごすぎるデモたちは https://letsxd.com/ に上がっているので、ぜひDLしてみてください!

ここまですごいアニメは作れなくても、ボタンの活性・非活性などのスタイルが一元管理できるのは本当にありがたい!

2【Adobe XD】ついにXDにPadding機能がやってくる....?

連続XDですみません、でも今年のXDの発表は本当に凄かったんですよ!

Sketchユーザーの方はプラグインの「anima」でおなじみ、paddingを保持したまま要素を編集できる機能がXDにもくるそうです!!!!

実装時期は未定とのことでしたが、私は見逃さなかった...ほぼほぼUIが完成されていたのを....!早くリリースされるといいですね!!!

3【Illustrator for iPad】フォトショに続いてイラレもiPadにやってくる!!!

私がAdobeの中で一番好きなソフトのイラレが!iPadにやってくる!これでいつでも一緒です! デモを触らせてもらいましたが、操作感はほかのペイントツールとは違う、パスの描画やパターンの生成などに特化した印象でした。

少し前に話題になっていた、AdobeSenseiのトレース機能もこのiPad版に搭載されるようです。 1時間粘って調整したトレスより、Senseiが書いたパスの方が綺麗ですね....完全に人間超えてます。

4【Adobe Fonts】イラストレーターヒグチユウコさんのフォントがAdobeから出る!!

日本で一番あいくるしい明朝体の一つ、「貂明朝」を生み出した神タイプデザイナーの西塚涼子さんが、同じく愛くるしいタッチで絶大な人気を誇るイラストレーター・ヒグチユウコさんの書き文字フォント「ヒグミン」を開発中です!

この美しく個性的な形!!!(ひらがな・カタカナ・英語数字に対応)

f:id:fukiworks:20191205202600p:plain
縦書きのヒゲの神回避感がすごい

そしてヒグチさん書きおろしのカラーグリフ(絵文字)も!太っ腹すぎる!

グリフも1文字3つ用意している...たまらん....!

リリースされたらたくさんデザインして印刷でも遊んでみたいですね〜〜!!

5【Adobe Photoshop...?】Adobeが本気の線画変換ツールを発表!

最後はBeer Bashのプレビューから! ついに世界初公開の技術デモが発表されました! 動画をご覧ください↓

みんながお酒を飲んで油断している時にこんな神技術をしれっと見せられるとは...! 注目度もかなり高く、なんと私のあげた動画ツイートが1万Favを突破してしまいました....!びっくりした...!

「輪郭検出/輪郭のトレース」など、線画を抽出する機能は前からあったんですが、線が虹色になっちゃったりノイズがひどかったりして、なかなか漫画シーンでワンタッチで使えるクオリティにはならなかったんですよね。これで日本のアシスタントさんの睡眠時間が増えるかも....?本当にAdobeさんありがとうございます!

感想:Adobeさんありがとう

魔法のような技術が目白押しだったAdobe MAX Japan。会場の熱量はすさまじく、来場者のAdobe愛もビシビシ伝わってきました!

最終的な感想は「Adobeさん、ありがとう...!」の一言です。感謝。

ここに乗り切らなかった情報もたっくさんあるので、Twitterで「#AdobeMAXJapan」の検索をかけてさらなる情報をキャッチアップしてみてください。

そしてまだ参加したことのない方は、来年ぜひぜひ!足を運んでみてください!

さいごに

GameWith では一緒に働く仲間を募集中です!

毎月もくもく会なども開催しているので、気軽に連絡ください!

www.wantedly.com

ツイッターアカウントを開設しました!

twitter.com

PHP Conference Japan 2019 に協賛しました #phpcon #GameWith #TechWith

こんにちは。GameWith のエンジニアのtiwu です。

今年も始まりましたアドベントカレンダー!

qiita.com

GameWith は去年から参加させていただいています!

qiita.com

今年も GameWith のいろいろな人が書いていくので楽しみにしててください!

PHP Conference Japan 2019

この度、12/01 に開催された PHP Conference Japan 2019 に協賛しました!

phpcon.php.gr.jp

ゴールドスポンサーをスポンサードさせていただき、当日はブース出展をさせていただきました!

ブースでは PHP SLOT を回して見事「PHP」が揃ったらスマホバッテリーをプレゼント、という企画を行いました!

php-slot.firebaseapp.com

f:id:tiwu:20191204112833j:plain

とても好評で午後にはスマホバッテリーがなくなってしまいました!

f:id:tiwu:20191204112926j:plain

PHP SLOT は合計1000回以上回転されて、PHP と揃ったのは150回ほどでした!

参加していただいたみなさんありがとうございました!

来年も開催されるとのことなので今からとても楽しみにしています。

これからもGameWith は PHP と PHP コミュニティのさらなる発展に貢献していきたいと思います!

さいごに

GameWith では一緒に働く仲間を募集中です!

毎月もくもく会なども開催しているので、気軽に連絡ください!

recruit.gamewith.co.jp

ツイッターアカウントを開設しました!

ブログ更新情報や、イベントの開催など告知していきます!

twitter.com

GameWith フロントエンド もくもく会 #17 開催しました #GameWith #TechWith #gamewith_moku2

こんにちは。GameWithのエンジニアのtiwuです。

アドベントカレンダー!

今年も始まりましたアドベントカレンダー!

qiita.com

GameWith は去年から参加させていただいています!

qiita.com

今年も GameWith のいろいろな人が書いていくので楽しみにしててください!

GameWith フロントエンド もくもく会 #17

11月28日(木)にGameWith主催で第17回目のもくもく会を開催しました!

gamewith.connpass.com

今回のテーマは僕自身が関心を高く持っているフロントエンドを採用しました。

この日は社内のエンジニアが7人くらい集まり、社内エンジニアのみでもくもく会を開催しました!

f:id:tiwu:20190329134140p:plain

もくもく会は最初にお知らせ、次に自己紹介と今日のもくもく内容を発表して、もくもくし、最後に進捗発表という流れで開催しました!

2時間ほどもくもくしたら本日の進捗の発表をしました!

  • PHP SLOT のアニメーションの判定処理の実装
  • Nuxt.js を Netlify でデプロイ
  • React, Vue.j の比較

といった様々なテーマの取り組みのもくもく会でした!

社内エンジニアのみのもくもく会は初でしたが、普段の仕事とはまた違う雰囲気でとても良かったです!

次回告知

今年最後のもくもく会です!

12/26に開催します!次回のテーマはフロントエンドです!

gamewith.connpass.com

最後に

GameWithのDeveloper向けTwitterアカウントを開設しました。

もくもく会の告知やブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!

twitter.com

Designship に協賛しました! #Designship2019 #GameWith #TechWith

こんにちは。GameWith のエンジニアのtiwu です。

今年も始まりましたアドベントカレンダー!

qiita.com

GameWith は去年から参加させていただいています!

qiita.com

今年も GameWith のいろいろな人が書いていくので楽しみにしててください!

Designship

この度、11/23, 24 に開催された Designshp へ協賛をしました!

design-ship.jp

GameWith は今までエンジニア関連のイベントへスポンサードを行っておりましたが、今年からデザイン関連のイベントへも積極的にスポンサードを行っております。

tech.gamewith.co.jp

これからもさらなる発展に貢献していきたいと思います!

さいごに

GameWith では一緒に働く仲間を募集中です!

毎月もくもく会なども開催しているので、気軽に連絡ください!

www.wantedly.com

ツイッターアカウントを開設しました!

twitter.com

GameWithのPHPUnitを4から8にバージョンアップした話 #GameWith #TechWith

こんにちは!GameWithのサーバサイドエンジニアのkuromokaです!

先日、GameWithのサイトをPHP7.3にバージョンアップした記事を書きました。

tech.gamewith.co.jp

ただPHPUnitのバージョンはそのまま4系を使い続けていて、4系だとPHP7に対応していないために次のような問題点がありました。

  • 新規にPHP7.3のコードは書けるけどテストコードが書けない
  • 既存のテストコードが書かれている箇所を、PHP7.3のコードに変更するとテストコードが失敗

そのため今回、現行の最新バージョンであるPHPUnit 8へのバージョンアップを行いました。

対応内容

そのままパッケージのバージョンを上げただけでは当然動かなかったので、次の対応を行いました。

DbUnitの変更

DB関連のテストコードでは、DbUnitというパッケージを使っています。今回の対応ではこれも合わせてバージョンアップをする必要がありました。

ただし本家のsebastianbergmann/dbunitは、更新がストップしているためにPHPUnit 8に対応していませんでした。そのためDbUnitの依存を外すことも考えたのですが、コード中で使われている箇所が多く断念しました。

どうしようか?といろいろと検索しているうちにforkされたパッケージがいくつかあるのを知り、一番スター数の多かったkornrunner/dbunitを使うことにしました。現行の最新バージョンの4.1.0なら、PHPUnit 8にも対応しています。

packagist.org

テストクラスの変更

次のクラスがPHPUnitとDbUnitで名前空間ベースに変更されていて、クラスが見つからないとエラーが出るため修正しました。

  • PHPUnit

    • PHPUnit_Framework_TestCase
      PHPUnit\Framework\TestCase
  • DbUnit

    • PHPUnit_Extensions_Database_TestCase
      PHPUnit\DbUnit\TestCase
    • PHPUnit_Extensions_Database_DataSet_YamlDataSet
      PHPUnit\DbUnit\DataSet\YamlDataSet

前後処理のメソッドへのvoidの追加

テストメソッド実行前の処理を書くsetUP()など、PHPUnit\Framework\TestCaseでvoidが追加になったメソッドがあります。*1

そのため継承したテストケースのクラスでも同じように、voidを追加する必要がありました。

<?php

class AppTest extends \PHPUnit\Framework\TestCase
{
-   protected function setUp()
+   protected function setUp(): void
    {
        ・・・
    }
}

GameWithで書かれているテストコードでは次のメソッドが対象でした。

  • setUP()
    setUp(): void
  • tearDown()
    tearDown(): void

例外テストの変更

setExpectedException()が廃止になっているため、expectException()に変更をしました。

例外アノテーションの変更

@expectedException のアノテーションでの例外テストはPHPUnit 9で消える予定のため、実行すると次のようなwarningメッセージが出てきます。そのため同様にexpectException() への変更を行いました。

The @expectedException, @expectedExceptionCode, @expectedExceptionMessage, and @expectedExceptionMessageRegExp annotations are deprecated. They will be removed in PHPUnit 9. Refactor your test to use expectException(), expectExceptionCode(), expectExceptionMessage(), or expectExceptionMessageRegExp() instead.

無意味なテストの修正

「無意味なテスト」とは、ドキュメントの「リスクを伴うテスト」の章に書いてあるテストのことです。GameWithのテストコードではこの「無意味なテスト」が非常に多く今回の修正で一番大変な部分でした。オプションでチェック無効にもできるみたいですが、結局はコード負債として残ってしまうため一緒に直すことにしました。

phpunit.readthedocs.io

いろいろな「無意味なテスト」のパターンはあったのですが、たとえばreturnしない関数へのテストで、アサーションが何もないようなテストコードがありました。
実際のコードでは呼び出し後にモックの引数チェックなどが続いてたりしたのですが、肝心のアサーションがないのでThis test did not perform any assertionsというメッセージが出ていました。

<?php

function void_func(): void
{
    ・・・
}
<?php

class AppTest extends \PHPUnit\Framework\TestCase
{
    public function test_void_func()
    {
        void_func();
    }
}

このパターンのテストコードは、assertNull()でNULLかどうかのアサーションを追加して対処しました。

<?php

class AppTest extends \PHPUnit\Framework\TestCase
{
    public function test_void_func()
    {
        $result = void_func();
        $this->assertNull($result)
    }
}

他の「無意味なテスト」の修正についても書くと、何日掛かっても書き終わらないので今回はこれだけにしておきます!

修正差分

今回のバージョンアップ対応を含めたPRは、Composerの定義ファイルの更新なども含まれていますが、

  • Files changed: 105
  • +2,471 −5,554

となかなかの大工事になりました。

f:id:kuromoka16:20191127203933p:plain

まとめ

これまで書いてきた対応を行ったことで、最初に書いた問題点を解決することができました!

  • 新規にPHP7.3のコードは書けるけどテストコードが書けない
  • 既存のテストコードが書かれている箇所を、PHP7.3のコードに変更するとテストコードが失敗

と言いたかったのですが、GameWithではモックのフレームワークにAspectMockを使っていて、こちらもPHP7.3に対応したバージョンに上げる対応を別途行いました(泣)
現在は対応が完了して、上記の問題点は解決しています!

終わりに

GameWithのDeveloper向けTwitterアカウントを開設しました。

技術やブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!

twitter.com

*1:網羅的に書いてあるページは見つけられなかったのですが、https://phpunit.readthedocs.io/en/latest/fixtures.html などを参考にしました。

LINE DEVELOPER DAY 2019 に行ってきました! #GameWith #TechWith #linedevday

こんにちは!ラグマスの3次職実装でワクワクしているiOSエンジニアの @chuymaster です。 2019/11/20~2019/11/21 に開催された LINE DEVELOPER DAY 2019 の二日目に参加してきました。昨年は1日だけでしたが、今年は2日開催で、1日目は技術とサーバーサイド、2日目はプロダクトとクライアントサイドの日でした。

linedevday.linecorp.com

f:id:gwchai:20191122095008j:plain
LINE DEVELOPER DAY 2019
下記のセッションを聞きました。

  • Opening DAY2
  • "LINE-like" Product Management of Smart Channel
  • Flutter for LIVE Commerce
  • iOS版LINEの成長
  • ユーザーとともに創るサービス
  • 【実演】 日本の自治体が提供するLINEを活用した便利なサービスを体験し、その作り方を学ぼう
  • ビジネス、テクノロジー、クリエイティヴのバランスをとるには?

私はクライアントサイドと、サービス創りのセッションをメインに聞いてきました。印象に残った内容を共有したいと思います。

Opening

speakerdeck.com

 今年始めて2日に渡って開催したらしく、内容もデベロッパー以外にも、UI/UX、PM、ゲスト登壇など、盛りだくさんになりました。1日目の色は青にこだわり、2日目の色は緑にこだわるということで、細部までブランドカラーを管理している印象が持てました。

 今年はLIFE With LINEというコンセプトでイベントを開催しているらしく、LINEをハブにして生活の様々なシーンにサービスを提供したいそうです。とても夢があって、強いなぁと思いました。LINEはこれを実現するために、環境をオープンにして、APIの形で他社のデベロッパーに提供しています。これにより、LINEだけでは対応できない様々なサービスが提供されるようになります。ユーザーを巻き込んでエコシステムを作る開発スタイルは、これからの主流であるだろうなぁと感じました。

 弊社もLINEのチャットボットを活用しているので、良かったらこちらの記事もご確認ください。

tech.gamewith.co.jp

"LINE-like" Product Management of Smart Channel

speakerdeck.com

 Smart Channelというプロダクトの開発経緯、大事にしている価値観の話でした。Smart Channelは、ニュースや広告を出している、トークリストの一番上にあるパネルのことです。とても重要な場所に出していますね。

 PMであるスピーカーの朝井さんは、企画の段階で、ほとんどのユーザーが嫌いであろうと思って、企画を潰したい考えでした。しかし、アンケートを実施したら、意外と5割以上のユーザーがポジティブな意見を持っているそうです。やっぱり、ユーザーに聞いてみないと分からないなぁと思いました。

 "Always Data-Driven" の価値観の元、早い段階からユーザーの声を聞いて、本実装する前に結果を検証できるように、プレテスト・A/Bテスト・段階的リリースを実施したようです。現在のGameWithの開発フローもこれに近いですが、まだまだノウハウが足りなくて、日々試行錯誤しています。

Flutter for LIVE Commerce

speakerdeck.com

 Flutterを業務で使う話。クロスプラットフォーム開発のメリットの洗い出しや技術検証を行って、各関係者(企画、デザイン、QA)を説得したそうです。Flutterに限らず、新技術の導入のプロセスとして参考になりました。

 特に印象的だったのが、デメリットである「Flutter動画プレイヤーのカスタマイズがイマイチ」を、Platform Viewを使ってネイティブの動画プレイヤーで実装して回避できたことを、技術検証の段階でいち早く行ったことです。コア機能の検証が最優先だと学びました。弊社アプリチームもFlutterで開発してみたいので、参考になりました。

iOS版LINEの成長

speakerdeck.com

 LINE iOSのコードベースが1.4m行らしいので、Dependencies問題、ビルド速度が遅い問題が大きいそうです。その改善をたくさん紹介していました。主にモジュール化が大きいですね。iOSデベロッパー向けの細かい実装内容なので、興味があれば資料で確認してください。

ユーザーとともに創るサービス

f:id:gwchai:20191122105551j:plain

 マンガサービス「アル」のけんすうさん。「物語思考」を中心に、最初から完璧なサービスを出さず、ユーザーに運営者の気持ちになってもらって一緒にサービスを創っていこうという話です。ユーザーは「お客さん」ではなくて、「運営者」だと捉えるのがとても斬新でした。ピンチも共有して、応援やアドバイスをもらっているみたいです。ほとんどのサービスがコモディティ化した今、ユーザーが自分が関わっているサービスでないと愛着が沸かなくて、新しい選択肢が出た瞬間に離れていくということでしょう。

【実演】 日本の自治体が提供するLINEを活用した便利なサービスを体験し、その作り方を学ぼう

f:id:gwchai:20191122105610j:plain

 LINEのMessaging APIを担当したあとに独立した方がスピーカーです。福岡市の粗大ごみ回収を、LINEでできるようにしたあと、全ての自治体の「LINE窓口」を作りたくて独立したそうです。自治体での手続きは本当に面倒くさいなので、彼の「Chatbot as a service」のビジョンにとても共感しました。

 セッション内容は、住民票申請をチャットボットで行うデモと、その管理画面の説明、裏側の技術の説明でした。お客さんであるユーザーの利便性を考え、代弁して自治体にシステム導入を説得したことが印象的でした。

ビジネス、テクノロジー、クリエイティヴのバランスをとるには?

f:id:gwchai:20191122105648j:plain

 noteの方のセッション。ビジネス、テクノロジー、クリエイティヴが立ち会わないと、ビジネスで差別化できなくなる世界なので、3者のバランスが必要だというお話。ミッション、メタファー(共通言語)、定性と定量の共存が主な話題でした。また、KPIの数字は共通言語にもなりますが、1つの指標だけを追うと他の指標のバランスが崩れてしまうので、全体的に見ることが重要とのことでした。

その他

 会場がグランドニッコー東京台場で、とても豪華でした。受付は顔認証で一瞬にできて、全く手間がなくて感動的でした・・・未来都市だぁ。知見と刺激がたっぷりで、良い一日を過ごすことができました!

f:id:gwchai:20191122105455j:plain

終わりに

GameWithのDeveloper向けTwitterアカウントを開設しました。

技術やブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!

twitter.com

Android Studio (IntelliJ IDEA)のデバッグコツ - 特殊ブレークポイントの使い方 #techwith #gamewith

はじめまして、GameWithでAndroidエンジニアをしているgiです。

今回はIntelliJ IDEAのデバッグについて話をします。

タイトルにはAndroid Studioと書いてますけど。基本IntelliJ系のIDEの使い方は同じですので、WebStorm、PhpStrom、PyCharmなども通用します。

本文にあるサンプルはAndroid StudioとJavaを使っています。

目次

まずはブレークポイントの種類

Line breakpoint

f:id:k_gi:20191121144840p:plain

デバッグしたい行に設定するだけ、一番普通のブレークポイントです。

Method breakpoint

f:id:k_gi:20191121145303p:plain

設定する箇所はデバッグしたいメソッドを定義する行です。デバッグするとき、デフォルトはそのメソッドの1行目に止まります。

f:id:k_gi:20191121145725p:plain

そのブレークポイント上で右クリックして、Method entryMethod exitで止まるところを設定できます。Method entryはメソッドの1行目、Method exitの最後の行です。デフォルトは全部選択されてます。

f:id:k_gi:20191121150059p:plain クラスのメソッドだけではなく、インターフェイスのメソッドにも設定できます。インターフェイスのメソッドに設定してデバッグすると、そのインターフェイスを実装したすべてのクラスの同じメソッドに止まります。

コード上にインターフェイスしか分からない場合、このブレークポイントがよく役立ちます。

Field breakpoint

f:id:k_gi:20191121151538p:plain 設定する箇所はフィールドを定義した行です。デバッグするとき、デフォルトはそのフィールドの値を変化するところです。

f:id:k_gi:20191121152451p:plain

Method breakpointと同じ、ブレークポイント上で右クリックすると、Field accessFiled modificationで止まるところを設定できます。Field accessを設定すると、そのフィールドをアクセスたびに止まります。デフォルトははFiled modificationのみ。

いつ、どこでフィールドの値が変化したを知らない場合、このブレークポイントがあれば楽になります。

Exception breakpoint

他のブレークポイントと違って、設定するところはdebug barにあります:

f:id:k_gi:20191121153913p:plainf:id:k_gi:20191121154112p:plain

サンプルはJavaので、Java Exception Breakpointsを選択する。そのあと、Exceptionの種類を設定できます:

f:id:k_gi:20191121154233p:plain

サンプルはIllegalStateExceptionを選択する。実際サンプルコードを使ってデバッグすると、Exceptionを発生するところに止まります:

f:id:k_gi:20191121154433p:plain

次はブレークポイントの特殊設定

サンプルには一番普通のLine breakpointを使っています、他のブレークポイントも同じ設定できます。 特殊の設定は基本ブレークポイント上に右クリックして、表示したDialog上で設定します。

Enabled

f:id:k_gi:20191121155352p:plain

ブレークポイントが 有効 / 無効 の切り替え。

Suspend

f:id:k_gi:20191121155601p:plain

  • チェックボックス:このブレークポイントがヒットするとき、スレッドが止まるかどうかの切り替え。外すと、ブレークポイントに止まらないですが、まだ有効です。下のEvaluate and logと併用する場合は多いです。
  • All / Thread:ブレークポイントがヒットするとき、すべてのスレッドを止まるか、そのスレッドだけ止まるかの設定です。

Condition

ブレークポイントを止まる条件を設定できます。いわゆる条件付きブレークポイントのことです。

設定した 判別式 / コードブロック は必ず True / False を返却する必要があります。

例えばLine breakpointのサンプルに、ブレークポイントにi==5の判別式を設定して、デバッグすると:

f:id:k_gi:20191121160740p:plain

iの値が5のときのみ、ブレークポイントに止まります。(ヒットは毎回ヒットする)

Evaluate and log

右クリックで出たDialogに、Moreをクリックして、より詳しく設定ができるDialogを開けます:

f:id:k_gi:20191121161253p:plain f:id:k_gi:20191121161604p:plain

その中に、Evaluate and logのチェックボックスをチェックして、出力したい判別式を入手する。例えば:

f:id:k_gi:20191121161839p:plain

そのままデバッグすると、毎回止まるので、Logだけ出力したい場合、上で紹介したSuspendのチェックボックスを外します。実行した結果は:

f:id:k_gi:20191121162038p:plain

hello world xは元々メソッドの実行結果です、"current i: x"はブレークポイントから出力したものです。

ちなみにAndroid上でlogを出力場合、出力したlogはLogcatではなく、Debug Consoleにあります。

Remove once hit

1回のみのブレークポイント、1回止まると、自動的にブレークポイントを削除します。

Disable until breakpoint is hit

f:id:k_gi:20191121163844p:plain

すでに存在したブレークポイントから依存先を選択できます。依存したブレークポイントをヒットする前はずっと無効の状態です。依存先がヒットしたあと、このブレークポイントは有効になります。複雑なケースでデバッグする場合はおすすめです。

最後、Evaluate Expression

ブレークポイントが止まってる状態で、Option + F8(Mac)か、debug barのボタンをクリックかで開けるDialog:

f:id:k_gi:20191121164620p:plain f:id:k_gi:20191121164641p:plain

その中に、自分が実行したいコードブロックを入力して、実行できます。変数の値を見るとか、値を変えるとか、判別式を実行するとか、いろいろなことができます。

まとめ

以上はIntelliJ系のIDEでデバッグするとき使えるコツみたいなもの。自分が書いたコードではなく、SDKにあるコードをデバッグするとき、結構楽になります。

公式のドキュメント:https://www.jetbrains.com/help/idea/using-breakpoints.html

終わりに

GameWithのDeveloper向けTwitterアカウントを開設しました。

技術やブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!

twitter.com