HerokuにMySQL+NginxのRailsアプリを移管した
さくらのVPSで運用してたRailsのアプリだが、ほとんど放置状態になっているのにも関わらず月1000円ぐらい払い続けているのがもったいないのでherokuのフリープランに移管した。
つまずきつつ解決したことなどを健忘録的に書き残しておく。
Ruby や gem のバージョンアップ
Macの場合入れるだけで大体つまずく
次からはDocker使ったほうがええんじゃないかと思った。シンプルにググったらなんとかなるものが多いからがんばれ
一回 Gemfile.lock
を消して bundle install して一気に依存解決するという技があった
precompile
デプロイはGithubのリポジトリ指定するだけで簡単にできたがCSSがあたっていない。
precompileに設定が必要で、まず下記のgemをproductionに指定する。
gem 'rails_12factor'
あとは bundle exec rake assets:precompile
もしておく。
DBのインポート
DBはプラグインという形で提供されている。
PostgreSQLで問題ない場合はPostgresを使うのが無難っぽいが、MySQLを使いたかった。
heroku addons:create cleardb:ignite
というコマンドでインポートできると公式に紹介があるが、--fork
コマンドはMySQLサーバーがpublicにアクセスできるところにある場合に使えるみたいで、無効なURLを渡しても静かに失敗する。
JawsDBはフリーの制限が結構厳しくて、DBのサイズによってはINSERT時に勝手にRejectされたりするっぽい。
で結局いかの記事を参考にClearDBにmysqlコマンド使って書き込むってやつをやった。
JawsDBを例に書いてあるがClearDBでも同様にできる。ホスト名とかパスワードとかどこ?!ってなるがheroku config で出てきたmysql:の連結URLをバラせばいける。
heroku config -a [app-name]
最後にDATABASE_URLを指定するのだが、そのときはmysql:をmysql2:に変更する。
heroku config:set DATABASE_URL='mysql2://~~~' -a [app-name]
独自ドメインの設定
設定のDNS Targetからアドレスを持ってきて
CNAMEに設定すればOK
以下日記
Mac上でRailsアプリだが、Herokuにはかなりあっさりデプロイすることができた。一方さくらのVPSはというと、VPS自体に罪はないのだけどなんかいつからかnginxのソケットがなんとかで落ちてて、productionのlogはlogrotateしてなかったので20GBとかになってた ほかにも罠は色々ある気がするけど日常的にサーバー管理してないのでもう1〜2年置くとさっぱり思い出せんし再度デプロイするのにサクッとできる自信は全然ない。マネージする範囲は絞ったほうがいいな〜と再実感しました。おわり
potatotips #67 に参加しました (iOSブログまとめ枠) #potatotips
potatotips #67 に iOS ブログまとめ枠で参加させていただきました。
会場はメルペイさん。
発表時間は各自で管理してくださいの精神、メの社風を感じる #potatotips
— Monkuma👾 (@kumamo_tone) 2019年12月17日
カンファレンスアプリをSwiftUIで作った / Masamichi Ueta さん
Flutter製の2018年製カンファレンスアプリをSwiftUIでリライトした。MVVM、Dark Mode、Localization、Sign in with Appleなどの要素を盛り込んでいる。
Listの同じRowにNavigationLink2個おいたとき、各々別の画面に遷移してほしいんだがそうならなかった。ScrollViewにForEachでVStackを並べることで回避した。
PageViewでpopするとXcode11.2.1のビルドでクラッシュしていたが、Xcode11.3ではクラッシュしなくなっていた。
コードはOSSとして公開している。
ブログにも書いてある。
FlutterをSwiftUIで書き換え、勢いがある #potatotips
— Monkuma👾 (@kumamo_tone) 2019年12月17日
ListだとTableViewになるけどScrollViewにすると全部メモリに展開されてReuseされなそうなのでListでもできてほしいな #potatotips
— Monkuma👾 (@kumamo_tone) 2019年12月17日
GeometryReaderでSwiftUIのViewをキャプチャする / Takeshi Sato さん
Viewのキャプチャ(スクリーンショット)を取りたい。
UIViewだとこうやるよね。でもSwiftUIのViewにはBoundsもCALayerもない。どうするか?
Bounds は GeometryReader で取ることにした。 CALayer は UIView に変換して取ることにした。
geometry.frame(in: .global)
や geometry.frame(in: .local)
で座標を取る。(それぞれUIViewのframeとboundsに相当しそう)
UIView への変換は UIHostingController に渡してやって、UIWindow に add して visible にした状態なら view プロパティから取れる。
let window = UIWindow(frame: CGRect(origin: canvasRect.origin, size: canvasRect.size)) let hosting = UIHostingController(rootView: body) hosting.view.frame = window.frame window.addSubview(hosting.view) window.makeKeyAndVisible() return hosting.view.renderedImage
サンプルコード。
Integrating Function Builder / AkihisaSengoku さん
Function Builderとはなにか、作り方と使い方など。
UICollectionView CompositionalLayoutできれいなGrid Layoutをつくる / Yuichi Kobayashi さん
UICollectionView⁰CompositionalLayout でグリッド作りたいとき、セル間の spacing を指定すると、セルがちゃんと正方形にならないときがあった
— Monkuma👾 (@kumamo_tone) 2019年12月17日
セルのwidthとheightをpriorityを1000 にして Groupのほうをself-sizingにすればOK #potatotips
Swiftサウンドプログラミングをはじめる〜メトロノーム編〜 / teruto_yamasaki さん
3通りの方法でメトロノームを実装してみた。サウンド再生スレッドの優先度は高く保つ。
Playground初心者から脱却するための3つのTips / 417_72ki さん
Playground の中で左のペインを出して New Playground Page すると Playground の中で複数の検証ができるので実は playground 作りまくらなくて良い。
sources/
の中にSwiftファイルを追加できて、処理も共通化できる(注:internal じゃなくて public にする必要がある)
SwiftUI 導入で LLVM のドキュメント読む羽目になった話 / Akkey さん
Xcode Preview が動かないときがあった。どうやら static framework に関係していて、 Linker flags に -fprofile-instr-generate を追加すると動くようになるようだった。なんでなのかを LLVM のドキュメント読んで調べている(情報募集中)。
画面をUITableViewで作るリスクとその対応 / zwtin さん
UITableVIew はパフォーマンスが良いって言うけど有限のリストの場合UIScrollViewにぶちこんだほうがかえってスクロール時にかくつかずに体験がよくなることがある(それはそう)
そのほか
まんぷくむすびはうまい
おにぎりおいしい #potatotips pic.twitter.com/tBkbdTDs6c
— Monkuma👾 (@kumamo_tone) 2019年12月17日
大胆にリスクを楽しむ
この記事は SHIROBAKO Advent Calendar 2019 の 16日目です。(日付越えてしまいました‥すみません)
SHIROBAKOは、アニメ制作会社の現場を描いたアニメです。2014年10月から2015年3月まで全24話が放送されました。エンジニアやデザイナーの現場にも通じる状況が描かれていたこともあって、放映から4年以上経ったいまでも人気があるアニメです。来年2月29日に初の劇場版も公開されます。個人的には遅ればせながら去年の12月に初履修しました。
個人的にピックアップしたいのは22話のシーン。
「だって去年の今頃なんて、自分がアニメ制作に関われるなんて夢にも思ってなかったんすから」 「りーちゃんは怖くないんだね...」 「何言ってんすか絵麻先輩 怖いのは脚本家になれないことです!」
人間のリスクに対する感覚は基本的によくできていて、大勢の目に触れるとき、それ自体は別に危ないことではないはずなのに、「怖い=危ない」と本能が訴えかけてきます。
その感覚自体は大事にしてあげたら良いと思うのですが、怖さに流されてしまうのはときとして長期的なゴールを遠ざけてしまう(この場合は「脚本家になること」)のではないかと思います。
個人的に今年を振り返ってみると、批評にさらされるのを恐れて公開するのを後回しにしたり、話しかけるべき人に嫌われることを恐れて話しかけるのを後回しにしたり、わくわくより怖さが勝って身動きが取れなくなってしまった記憶がいくつもあります。
このような短期的な怖さをはねのけることは簡単なことではなく、このようなときに必要になってくるのが「脚本家になりたい」のような強い情熱だと思います。このような強いものがあるからこそワクワクが勝つ。自分もりーちゃんのように、怖さが気にならないほどに夢中になって、大胆にチャンスを掴みにいくという姿勢でやっていきたいです。
退職しました
2016年4月に新卒で入社したヤフー株式会社を退職しました。
おしらせ:
— Monkuma👾 (@kumamo_tone) 2019年11月21日
私事ですが、現職を11月末付で退職します。2016年4月の入社から約3年間半、本当にお世話になりました。引き続きiOSアプリ開発をやっていく予定です。今後ともよろしくお願いいたします。 pic.twitter.com/bKenNQgvF1
半年の丁寧なOJT形式の研修のあと、主にiOSとAndroidアプリの開発を担当させていただきました。期間としては3年と8ヶ月になりますが、かなりいろんな経験ができて、成長できたと思います。Yahoo! JAPAN アプリをはじめ、多くの人に使ってもらえるプロダクトの機能開発に携わったり、新規プロダクトの開発に携わったり、社内ハッカソンで数人チームでプロダクトを作ったり、大小様々な規模の開発に携わることができました。副業は申請を出せばOKになっていて、副業で請けていたアプリ開発では、個人で1年強で200〜300万ほど稼ぐこともできました。(この頃に関してはそれなりにハードワークだったのできつかったですが…)。
また、社内での定期勉強会の主催や、大きなミートアップの主催をやらせてもらえたり、業務でカンファレンスに参加、登壇などさせてもらったりなどするうちに、自然と社内外の繋がりも増えてきて、社外からのお誘いや、経験の機会につながることもありました。学生のときにJavaやC#などでGUIを書いていたのが経験として活きたのはありますが、入社したころはアプリ開発は完全に未経験だったことを考えると、かなりの変化だと思います。
この個人事業主でも稼げるし社外からもオファーがもらえるという経験はかなり精神的に良くて、大学院のときは「これで卒業できなかったら結構きついだろうし、中退したらどうやって生きていけばいいんだ…」という感じだったのに対して、今は「最悪やめてもなんとかなるかも」という感じで積極的にリスクが取れるようになり、精神的に楽になりました。(学び続けないとすぐ役に立てなくなりそうというプレッシャーもあるので、完全に楽という感覚もないですが…)
全体的にいわゆるホワイト気質で、フリーアドレスやリモートワークも推奨されているので働きやすく、毎週の1on1などで振り返りの機会が得られるし、社食など福利厚生も充実していて、こういった点などもかなり良かったと思います。
じゃあなんでやめるのかというと、ひとつは現状関わっているプロダクトの方向性とやりたいことの方向性が合わず、社内異動も叶わなかったこと、また、これはよくある話だとは思うのですが、(自分の場合)新卒の給与テーブルからちまちま昇給するのを待つより、一度転職する方が大きく収入を増やせてしまうということなどが大きな要因でした。その他の細かいネガティブな面などに関しては、こういったところに一方的に書くのはフェアじゃないと思いますし、退職時のインタビューなどで概ね正直にフィードバックさせていただいたので、内部でできるだけ受けとめてもらえることを願っています。あっでもこれだけは言いたい。週休3日制ってどうなったんですか?
最終出社日でした いろんな人がメッセージくれて本当にありがたい pic.twitter.com/KHn1WBolHJ
— Monkuma👾 (@kumamo_tone) 2019年11月27日
人事発令が出てからは、退職を惜しんでくださる方がいたり、退職するにも関わらず、たくさんの人に前向きなメッセージをいただき、とてもありがたかったです。この会社でソフトウェアエンジニアとしてのスタートを切れて本当に良かったと思います。これからも引き続き頑張っていきます。
potatotips #65 に参加しました (Androidブログまとめ) #potatotips
potatotips #65 に参加させていただきました。
自分が所属しているヤフーで開催しました。
Android ブログまとめ枠の人がいなかったので軽く書いてみます。
5分でわかる Kotlin Contracts
手前味噌ですが Kotlin Contracts を5分でわかるようにまとめてみました。
嬉しかった感想を拾います。
Contractsが5分でわかった。
— めっしー (@175Atsu175) 2019年10月1日
この人にAndroid習いたいです。笑
#potatotips
Kotlin全然分からんけど分かりやすかった #potatotips
— なっぱんだ (@nappannda) 2019年10月1日
#potatotips @kumamo_tone さんの「5分でわかるKotlin Contracts」ポイントがとてもわかりやすくて感激してる。Contract使いたい。
— さっとみん🌱 (@satoomist) October 1, 2019
なるほどなー、まさにDesign by Contractできるんだなー おもしろい https://t.co/Uvnx1s0a63
— takasek (@takasek) October 1, 2019
GitHub Actionsを用いたDeployGateアプリ配布の自動化
デザイン確認用のアプリの配布が面倒だったので、Pull Request をダストデザイン確認用アプリが自動配布される仕組みを作った。
CIサービス、BitriseとかでもできるけどGitHub Actionsを検証を兼ねて利用してみた。
使い方や、つまずいたところなどを解説。
GithubリポジトリのSettingタブのなかにSecretsというのがある #potatotips
— Monkuma 👾 (@kumamo_tone) 2019年10月1日
Secretが新しく生えている。
ActionとしてPackage化してシェアできるの便利そう(iOSアプリ配布用Action欲しい!) #potatotips
— 所 友太 / ToKoRo Yuta (@tokorom) 2019年10月1日
便利そう
Github Actionsも使いこなしたさを感じました😊結構柔軟に色々試せそうな予感。#potatotips
— fumiyasac@UI実装であると嬉しいレシピブックVol.1&2著者 (@fumiyasac) October 1, 2019
TargetSdkVersion29で BottomNavigationが点滅する件
TargetSdkVersion29(Android 10)で、BottomNavigation がちらつくバグがあった。
再現するリポジトリを用意しました。
パッチを上げたがすでにissueが上がっていた。モンキーパッチを当ててなんとかすることもできるが、基本対応されるのを待ったほうが良いかも
そのほか
🍻 #potatotips pic.twitter.com/IJxFuxh2gM
— 所 友太 / ToKoRo Yuta (@tokorom) 2019年10月1日
のみもの
写真を撮ってTwitterに上げた方が良いかもしれないご飯 #potatotips pic.twitter.com/1OxsaqFFFL
— いせ (@iseebi) October 1, 2019
たべもの
おつかれさまでした。
iOSDC 2019 に参加しました #iosdc
iOSDC 2019 に参加者として参加しました。
愛社精神のある服装で来ています #iosdc pic.twitter.com/odPs522SDm
— Monkuma 👾 (@kumamo_tone) September 7, 2019
愛社精神のある服装で参加したりブースのお手伝いをしたりしました。
pixivさんにリジェクト除御守もろた #iosdc pic.twitter.com/TiMlOunkiO
— Monkuma 👾 (@kumamo_tone) September 6, 2019
pixivの社員さんにリジェクト除御守もらいました。凝りすぎててやばい。
3位だった 🥉 #iosdc https://t.co/rlqYhZjyGZ
— Monkuma 👾 (@kumamo_tone) September 7, 2019
ブースでCyberAgentさんから大吟醸いただきました。こんな載せてもらったり景品もらえたりで光栄ですがもっとスコア出せると思ってたのでちょっと悔しいぜ
乾杯 #iosdc #b pic.twitter.com/xOL2vP3KxN
— Monkuma 👾 (@kumamo_tone) September 6, 2019
ヤフーブース整いました #iosdc pic.twitter.com/EsIMVzJGp5
— Monkuma 👾 (@kumamo_tone) September 6, 2019
これがぎぎにゃんちゃんですか #iosdc pic.twitter.com/jYlxc65tdI
— Monkuma 👾 (@kumamo_tone) September 6, 2019
今回結構いい写真取れたと思うのでみて↑
とくにお気に入りの発表
今回見れていない発表も多いので、たまたま見れた範囲の話になります。また、厳選3本になります。
iOSアプリ設計パターン入門の著者でもあるtakasekさんのLT。著書でも説明されていたSOLID原則について、わかりやすい比喩をもとに説明されていました。
よくプログラミングの勉強をしていて「これって人生と同じだよな」みたいなことよく思うので共感できました。
個人的にモバイル決済に興味があるので、モバイル決済アプリをとりまく社会的背景、法律の話、Apple PayやJPQRの話などが、かなりわかりやすくコンパクトにまとまっていて大変良かったです。
個人的にこういったカンファレンスでは、自分の知識の幅を広げたいという側面もあるため、自分の中のそういったニーズにこたえてくれる発表でした。
また、プレゼンテーションのスピードや、話し方がとても聞きやすく、話に集中できました。
SDKを使わずにiOSの機能を使ってデジタル化粧をどのように実現するかという内容でした。
ハイパスフィルターや階調反転、オーバーレイなどおそらくこういった画像処理では基本的なテクニックを、実装を見ながらわかりやすく説明されていました。
PhotoShopのチュートリアルを参考にフィルターを実装するというのが、なるほど色々応用がきいて(よくある話なのかもしれませんが)かしこい方法だなー!と思いました。
OSSという、わかりやすく、人に役立つフォーマットでちゃんとアウトプットを出しているという点も素晴らしいと思います。
そのほか
発表者が頑張って作ったiOSDCの発表資料をTwitterのタイムラインに埋もれないようにまとめました
— 荒木敦 (@applideveloper) September 7, 2019
編集リクエストお待ちしております。
本当は、この記事ではなく、公式にiOS DCサイトに、代わりに公開していただけると助かります。https://t.co/UE0ACsYdtS
#iosdc
まとめありがてぇ
ぼやき
良いところもある一方で、もやもやした気持ちになるところもありました。
たとえば、今年はなんとか反省を生かして自分は取ることができたのですが、懇親会のチケットが取りづらい、チケットの存在に気づけなくて悲しい思いをしている人を見て悲しい、という経験は、一昨年、去年に続いて今年もありました。このフィードバックは過去にもアンケートなどを通じて行っているのですが、今年は(JOKERチケットの存在はあるとはいえ)さらにわかりづらくなっているように感じました。
おそらく個人的にこういったカンファレンスによく参加するようになって、過剰に色々なことが気になってしまうようになってしまっているだけのような気はします。他にももやもやした部分に関しては色々あるのですが、オープンな場に書いて炎上するようなことは自分も望まないので、アンケートがオープンしたらできるだけ静かにフィードバックさせていただければと思っています。
ただ、こういったネガティブな感想は、SNSなどでオープンに発言してしまった結果、「なんで運営に直接フィードバックしないんですか?」みたいなツッコミを食らっているところも、個人的によく散見します(あとはフード関連にコメント飯食いに来てるわけじゃないんだからwみたいな)(特定の個人や発言を指したものではありません)。
誹謗中傷はもちろん駄目なのですが、こういった問題意識に対して「運営が頑張ってくれてるんだから文句言うなよ!」的な同調圧力のようなものも(勝手に)感じていて、若干の生きづらさを感じています。より意見しやすい、風通しの良い風潮になることを望んでいます。
おわりに
なんやかんや書いてしまいましたが、新しい知見を得たり、色々な方と交流することもでき、大変ありがたいカンファレンスでした。 色々な人の努力や気持ちで成り立っていると思います。みなさまおつかれさまでした。ありがとうございました。
potatotips #64 に参加しました #potatotips
potatotips #64 のオーディエンス枠で参加させていただきましたのブログです。
Reproさんのオフィス駅近で最高!
めずらしいゼロカフェインコーラある!ありがてぇ #potatotips pic.twitter.com/cuPJRc0Y1x
— Monkuma 👾 (@kumamo_tone) August 27, 2019
ゼロカフェインコーラ最高!
ブログ枠じゃないので気軽に行くぞ!
Object指向でFatViewControllerをなくす
カスタムのViewControllerを書かずにUIViewControllerをそんまま使ってアプリ作ってみた話っぽい Object で NSObject をバインドする #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
テキスト入力制御へのアプローチ for Android
TextInputLayout を使えば
— Monkuma 👾 (@kumamo_tone) August 27, 2019
app:counterEnabled="true" app:counterMaxLength="100"
みたいな感じで文字数カウントはできる #potatotips
EditTextのmaxLength設定するだけですめばいいんだけど、現実的には101文字以上入力したりしたときにSnackbarだしてねみたいな仕様がぶっこまれたりしてて、結局リスナーをごにょごにょ実装する羽目になるというケース結構ありそう(遠い目) #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
どこがはみ出てるか教えてあげるやつは
最大文字数を超えた文字にBackgroundColorSpanを設定して
リスナーに追加すればOK
コントロールセンターとたたかう
作ったゲームVTuberに実況してもらいてぇ〜〜〜 #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
preferredScreenEdgesDeferringSystemGestures を override すると通知センターが出るのを一回だけ防ぐことができる
— Monkuma 👾 (@kumamo_tone) August 27, 2019
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
return .bottom
}
#potatotips
setNeedsUpdateOfHomeIndicatorAutoHidden() でホームインジケーターをオートヒドゥンできる #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
Event Recap from DroidconKE 2019
ケニアでDroidconがあったので行った話
アフリカの人陽気で良い
アフリカはAndroid端末が97% #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
Conditional Content in SwiftUI
ViewBuilderの中ではif文が書けるのでvar Bodyに直接@ ViewBuilder アノテーションつけちゃえば型消去しなくてもbuildEitherにしてくれてわざわざGroupやStackやAnyViewでラップしなくてもif文が使えるぜというアイデア #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
TruthとAssertJを比較してみた
アサーションライブラリgoogle/truthは2019年7月8日にバージョン1.0になった Google社内ではこのTruthを使って開発が行われている #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
google/truth: Fluent assertions for Java and Androidhttps://t.co/gBLnqs2DwL truthでGoogle検索するとちゃんと2つ目に出るんやな #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
AssertJができることを網羅しているわけではないが、必要最低限はすでに網羅している印象なので、将来性を考えたら導入してみてもいいのではとのこと #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
iPhoneでFeliCaを読み取ってみた
Felicaの読み込みの手続きのフロー、NFCTagReaderSessionのbegin()でタグのポーリングがはじまる NFCFeliCaTagのconnect()で接続、requestService()でサービスの存在確認、readWithoutEncryption()で読み込み #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
AACで犯しがちな間違い
viewModel.liveData.observe(this, Observer { updateViews(it) }) みたいな感じでFragmentを渡すと、detachでonDestroy()が呼ばれず、Observerが破棄されない。Activityならthisで良いが、Fragmentの場合はviewLifecycleOwnerを渡す #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
こういうのって警告出せたりせんんのんかな #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
MutableなLiveData はカプセル化しましょう
— Monkuma 👾 (@kumamo_tone) August 27, 2019
private val _offers = MutableLiveData<Offers>()
val offers: LiveData<Offers> = _offers#potatotips
DIKitで人間がクラス間の依存関係解決するのを終わらせる
DIKitを使うとDIができます
iOS13ではStoryboardでもDIができる件について - Qiitahttps://t.co/mPrYjmkWeg instantiateInitialViewController(creator:) たのしみですね #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
SwagGenのススメ
SwagGen を使うと OpenAPI/Swagger 3.0 対応の形式のパースと生成ができる
SwagGenの良いとこ
— Monkuma 👾 (@kumamo_tone) August 27, 2019
・Swift5に対応している
・Stencil記法
・Sourceryとかで使われているやつなのでMustacheより慣れているという人もいるのでは
・ifとかforとかも使える
・日付のフォーマット
・DateDayという型を使うと楽
・エラーハンドリング
・throws -> T? な関数がある#potatotips
Chucker で GraphQL の通信ログを見やすくした
ChuckerTeam/chuckerhttps://t.co/Ayaat6mWI7
— Monkuma 👾 (@kumamo_tone) August 27, 2019
ChucklerはOkHttpの通信ログを取って一覧で表示してくれるツールで、jgilfet/chuckがすでにあるが、2年以上更新されていないのでforkされ、別リポジトリで更新されはじめた#potatotips
見やすいわね
Chuckerのいいところ
— Monkuma 👾 (@kumamo_tone) August 27, 2019
・OkHttp 4に対応済み
・レスポンスの中に画像がある場合もちゃんと表示してくれる(バイナリ対応)
・テキストサーチしたとき引っかかった文字列がハイライトされるようになった#potatotips
GraphQL のサポートがほしかったので、 issue を出してプルリクを送った。
macOS アプリを2年ぶりにメンテしたら原型がなくなった話
App SandboxのNetworkのOutgoing Connection (Client)にチェックを入れると外側に向けてのポート開放ができる 無駄にIngoingとかもチェック入れたりすると怒られるので気をつけまょう #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
macOS だと Firebase Analytics が使えないらしいので Fabric Crashlysticsを採用した(1年後サービス終了)(今後ってどうなるんだろ) #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
sindresorhus/LaunchAtLogin: Add "Launch at Login" functionality to your macOS app in secondshttps://t.co/QYEIW6VYzV 自動起動オプションをつけれるライブラリがある #potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
Flutter Pluginを作る
Flutterのプラットフォーム依存のプラグインを作った
— Monkuma 👾 (@kumamo_tone) August 27, 2019
・基本的にはDartのパッケージシステムに則っている
・package(pure dart code)とplugin(platform-dependent code)の2種類ある
・TIP: プラグインの名前はクラス名になるので最後にプラグインをつけなくても良い#potatotips
・プラグインを生成したらExampleが入ってて感動した
— Monkuma 👾 (@kumamo_tone) August 27, 2019
・ネイティブライブラリに依存したいという時があると思うが、基本的にはCocoaPodsとCarthageで解決できる
・Platform Channelという仕組みを使ってやっているが、意外と困らない#potatotips
・プロジェクトのセッティングをやりたいとき、たとえばpushのcapabilityを設定したい場合とか そういう場合は.workspaceのcapabilityの設定をいじれば良い#potatotips
— Monkuma 👾 (@kumamo_tone) August 27, 2019
・Flutterのパッケージのpublishはhttps://t.co/WazvKEBph3というところにやる
— Monkuma 👾 (@kumamo_tone) August 27, 2019
・flutter pub pub publish という謎コマンドでやる
・TIP: 確定した状態でやらないと、WebUI上は削除する口が用意されていない dart-lang/pub-devリポジトリにissueを立てる羽目になる#potatotips
あとCordovaとの比較をしていた Flutterのプラグインシステムは開発体験が良い
感想とか
意外と最後まで集中力が持ってよかった ブログ枠のときもこのくらいの気軽さでやってもいいかもしれない
以上です!