ボケ防止日記

こつこつ続けたい

Flutter状態管理ライブラリ

モチベーション

  • Flutterアプリ作成のチュートリアル、作成をするにあたって調査していると、Flutterアプリの状態管理にはProvider及びその後継であるRiverpodを使用するのがセオリーだという記事を見た。
  • どこでも手放しに称賛されているので、とりあえず導入、使用方法を理解しておくべきだと判断。
  • そのうえで、メリデメについて自分なりに考察したい。

導入

dependencies:
  flutter_riverpod:
flutter pub get

使用方法

例えばAmplifyのInitializeをFutreProviderに、状態をStateProviderに持たせようとするとこんな感じだろうか。

final amplifyConfiguredStateProvider = StateProvider<bool>((ref) => false);
final amplifyConfigExecutorProvider = FutureProvider<bool>((ref) async {

  final _amplify = Amplify;
  _amplify.addPlugins([AmplifyAuthCognito()]);

  try {
    await _amplify.configure(amplifyconfig);
    final _amplifyConfiguredState = ref.watch(amplifyConfiguredStateProvider);
    _amplifyConfiguredState.state = true;
    return true;
  } on AmplifyAlreadyConfiguredException {
    return true;
  } catch (error, stack) {
    rethrow;
  }
});

void main() {
  runApp(ProviderScope(child: AppWidget()));
}

class AppWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, ScopedReader watch) {
    final AsyncValue<bool> _amplifyConfigExecutor =
        watch(amplifyConfigExecutorProvider);
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(title: const Text('Example')),
            body: Center(
              child: _amplifyConfigExecutor.when(
                  data: (configured) => Text('$configured'),
                  loading: () => const CircularProgressIndicator(),
                  error: (error, stack) => Text('Error: $error')),
            )));
  }
}

所感

  • 正直いまのところ何が嬉しいのかさっぱり分からない。
  • アプリが大きくなってきたら恩恵を受けられるようになる?
  • もしくはテストを書き始めたとき?

その他

  • Exceptionの取り扱い等が雑なので修正しないと。。
  • ConsumerWidgetの範囲を狭めればリビルドが早いらしい。設計時になるべくリビルド範囲を狭くするように設計したほうがよさそう。
  • 他にもスタンダードになっている便利なライブラリの捜索をしたいところ。

Amplify-Flutterチュートリアルその2

モチベーション

引き続きFlutterAmplifyのチュートリアルやる

Amplifyサイトのチュートリアル

アプリ雛形作成

私はAndroidStudioを使用しているため、ウィザードで作成した。

Amplifyインストール

npm install -g @aws-amplify/cli
  • 恐らく古いほうのチュートリアルではデベロッパープレビュー版をインストールするよう記載があるけど、こちらは通常版。
  • たしかに、既にGAしているわけだし、通常版でも使えてしかるべき

Pinpoint作成

  • Pinpointはマーケティング用ツールらしい
  • イベントログを送って集計やマーケティングに使える
  • デバッグログ収集にも手軽に使えるかな、と思ったがイベント中身の参照の仕方がわからない
  • 1つ1つの中身詳細を見るにはKinesisに一度送ってS3に保存してから見る必要がありそう?
  • 東京リージョン対応したのが最近だからか、Profileを東京リージョンにしていてもオレゴンリージョンに作成される。嫌なら修正を待つか、amplify push前にCF部分をいじるしかない
  • でもそのリージョン指定部分はAmplifyが自動生成するところなので、更新するような動作を行ったときに毎回修正しないとだめかも

所感

  • 流石にまだチュートリアル自体が短いのと、Amplifyをこうしたら組み込めますよ、という程度のものしかない
  • Flutterアプリ作成自体の勉強が別途必要
  • どこまでAmplifyの機能が使えるのかがまだ分かってない。AppSyncなんかはまだ使えないっぽい。

今日の一言

ようやく仕事が落ち着いてきた

Flutter-Amplifyチュートリアルやってる

状況

Next.js触ってみたりとか、いろいろ迷走している状況だが、やっぱりモバイルアプリ作りたいのもあってFlutterを見てみている。

モチベーション

チュートリアル

Amplify公式のチュートリアルと、AWSが提供しているチュートリアルがある。現在私がやってみているのはAWS公式のほう。

https://aws.amazon.com/jp/getting-started/hands-on/build-flutter-app-amplify/

やってみている現状

  • flutter用のamplifyライブラリの仕様がまだ破壊的変更多いため、修正が追いついていないようで、チュートリアルのコードそのままじゃ動かない
  • Linterがないと落ち着かないので導入したらやはりチュートリアルのコードは警告がそこそこあって悲しみ
  • dart言語はまだ闇が深いところ触ってないとは思うけどすごく分かりやすい
  • 普段お仕事はWebとかバックグラウンド、インフラメインなので、自分で書いたものがスマホでアプリとして動いてるって新鮮
  • Amplifyの構成自体はいっそCloudFormationやServerlessFrameworkで書かせてほしいと思うこともある
  • でもフロントからの連携がどうなっているか分からないので迂闊にさわれない
  • AndroidStudio(IntelliJ IDEA)の扱いになかなか慣れられない
  • Flutterのデバッグツールの使い方に慣れられない、というより使い方がまだ全くわからない

今後やりたいこと

  • 新しいものなだけあって、ネット上に記事が少なめ。でもやはり注目されているのか、新しいものの割には多い気がする
  • せめて上記チュートリアルの補完記事を書いていきたい
  • このままこのライブラリをしっかり追っていきたい
  • で、実際問題、何つくろ

今日の一言

お仕事が忙しくてもブログ継続する能力が必要。

WSLが異様に重かったワケ

モチベーション

WSLが異様に重くて、作業にならなくなった

原因

シェルをfishに変えていたこと(による、プラグインの何かかも)が原因だった。

対策

素直にBashに戻した。環境変数とかエイリアスの設定がだるぅい・・

  • zshにしようかとも考えたが、zshでも重いと言っている記事が多々あるのでやめておいた。

今日の一言

やはりMacbookか、LinuxはH/Wドライバに不具合あったときに対応する知識も根気もないんだよなぁ

WSL2でのメモリ枯渇問題対処

モチベーション

  • WSL2を使用して、勉強等を行っていると段々PCが重くなってくるためなんとかしたい。

原因

  • 重くなっているときのタスクマネージャーを見れば一目瞭然。
  • Vmmemというプロセスが大量のメモリを使用している。

対策など

  • 参考サイト https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120

  • この問題はWSL界隈ではずっと残り続けている問題児らしい。

  • 根本解決にはいまだいたっておらず、暫定対策としてメモリ使用量を固定する方法が効果的とのこと
  • %USERPROFILE%.wslconfigに以下のような設定を追加
[wsl2]
memory=8GB
swap=0

swap=0はSSD保護のため。

しかし・・

ホストPCがメモリ枯渇してにっちもさっちもいかない、という状況はなくなったが、WSLがものすごく重くなるという事象は変わらず。

結論

Macbookほしい

tmuxの導入

モチベーション

  • 業務ではSSHで踏み台サーバ接続した際等に必須(放置してセッション切れたりしたときの保険)
  • ローカルで起動するWSLだとそこまで恩恵はないかもしれないが、慣れているのもあって導入したい。
  • ついでだから、Prefix等の操作感、見た目についてもちょっと調べて凝ってみたい

前提

tmuxのインストール

brewでインストールするだけ。

brew install tmux

設定ファイルテンプレートのコピー

cp /home/linuxbrew/.linuxbrew/opt/tmux/share/tmux/example_tmux.conf ~/.tmux.conf

コピーしてきた.tmux.confをお好みに従って編集する。私は下記の記事を参考にさせてもらって設定した。 - https://red-full-moon.com/tmux-2020/

fishの導入

モチベーション

かっこいいターミナル画面のために、以前は色々やっていたが管理しきれなくなって最初から、みたいなことが多いので、デフォルトでかなりいい感じという話のfishに乗り換えてみようと思った。

前提

  • Linux、またはMacOS
  • brew導入済み
  • Powerline対応フォント導入済み

fishインストール

brewでいっぱつ

brew install fish

fishをデフォルトシェルに変更

sudo echo `which fish` >> /etc/shells
chsh

fisherを導入

fisherはfish用のプラグイン管理ツール。

curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher

とりあえず見た目をかっこよくする

fisher install ilancosman/tide

インストール後に、すぐに設定するか聞かれるので設定してしまう。

fish_config

お好きなカラースキーマを選択しましょう。私は割と気分ですぐ変えますがseaweedあたりがお気に入りです。

今日の一言

週末雨降ると釣りにいけなくてつらい。