色々やりたい系エンジニアのメモ

技術情報、勉強日記などを書きます

システムアーキテクト勉強 2,3,4日目

2日目

1日目と同じページ数ほどさらっと読んだ

計算問題はほぼ飛ばしていたのでまたやる

3日目

1日目+40ページほど読んだ

4日目

3日目から1日だけ間空いた

最初から1日目+100ページほど読んだ

3章に入って知っている単語が多くなってきた(データベース周り)

今度からはここから始めて回数こなしたい

SQLを紙の上で読み解くということをしたことがないので初めは苦労しそうな予感がする

システムアーキテクト勉強 1日目

うかる!高度試験午前 Ⅰ・Ⅱ を使用

amzn.asia

方針

  • とりあえず読み進め、1日で理解しようとしすぎない

結果・感想

  • p75まで軽く読んだ
    • 解いた問題もあるが、基本わからないので考えずに答えを見ていた
  • 問題文のような長くて硬い文章を読むのが10年ぶりだったので全然頭に入ってこなくて悲しくなった
    • やってたら慣れると信じている
  • 他作業中の気分転換に取り込めるようになれればいいな と思っている

openapi-generator dart でError: The language version override has to be the same in the library and its part(s).

起きたこと

openapi-generator generateで dart-dio を生成してアプリをデバッグしようとしたところ The language version override has to be the same in the library and its part(s).エラー

エラー詳細

ファイル名は変更しています

Launching lib/main.dart on iPhone SE (3rd generation) in debug mode...
main.dart:1
Xcode build done.                                           15.0s
Failed to build iOS app
Error (Xcode): lib/client/lib/src/model/sample_request.dart:9:6: Error: The language version override has to be the same in the library and its part(s).
sample_request.dart:9
Could not build the application for the simulator.
Error launching application on iPhone SE (3rd generation).
Exited

自分の解決法

openapi関連ディレクトリをlibと同じ階層に持ってくる

エラーが起きた当初、下記コマンドでgenerateしlibの中にclientディレクトリを入れていた

openapi-generator generate -i openapi.yaml -g dart-dio -o ./lib/client

これでは実行時に先述のエラーが出たため以下で実行し直した

openapi-generator generate -i openapi.yaml -g dart-dio -o ./openapi/client

これでいけました。

なぜlibの中にclientディレクトリを入れていたか

dart関連のファイルをlibの外に出すのが何となく違和感があったため

参考記事

zenn.dev

uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:cloud_firestore]

エラー

/Users/【ユーザ名】/VScodeProjects/【プロジェクト名】/android/app/src/debug/AndroidManifest.xml Error:
    uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:cloud_firestore] 
/Users/【ユーザ名】/VScodeProjects/【プロジェクト名】/build/cloud_firestore/intermediates/merged_manifest/debug/AndroidManifest.xml as the library might be using APIs not available in 16

Suggestion: use a compatible library with a minSdk of at most 16,
        or increase this project's minSdk version to at least 19,
        or use tools:overrideLibrary="io.flutter.plugins.firebase.firestore" to force usage (may lead to runtime failures)

やってみたこと

  • エラーに書かれている通り、android/app/build.gradleminSdkVersionを19にしてみた

結果

別のエラーが出た

これについて細かく見ていないが、SDKバージョン19というのはAndroid4.4相当らしく、今デバッグ端末で使っているAndroid端末はバージョン12なのでもう少し新しくすれば動くのではと思った

参考 APIレベルとAndroidバージョンの関係

developer.android.com

最終的に動いた方法

android/app/build.gradleminSdkVersionを30にすると動作した

【Flutter】 このファイルは何のファイル?メモ

はじめに

主に設定ファイル系で色々見たこと無いものがあったのでメモ

ios/Podfile

  • iOSやMacOSアプリを作る際のライブラリのバージョンを指定するファイル
    • CocoaPodsというツールで使う
    • Podfile.lockは、インストールされたライブラリのバージョンが書かれたファイル(自動生成)
  • RailsでいうGemfile

ios/Runner/Info.plist

実行ファイルのための構成情報を書くファイル

以下のようにkeyと指定内容をセットで書く

 <key>CFBundleName</key>
    <string>helloworld</string>

android/app/src/main/AndroidManifest.xml

  • アプリに関する重要な情報を Android ビルドツール、Android オペレーティング システム、Google Play に対して説明するもの

developer.android.com

pubspec.yaml

Flutterプロジェクトの設定ファイル

【メモ】Flutter学習にあたり難しそうだと思う箇所

何のためにこの記事を書くか

  • アウトプットありきで勉強した方が身につくとどこかで見たし確かにそうだなと思ったので、今の自分が大喜びしそうな内容の記事を未来の自分が書くためにどこにハードルを感じているか残しておきたい為

前提

  • モバイルアプリエンジニアではない
  • Webアプリケーションエンジニア
    • サーバーサイド5年
      • フロントは修正程度にたまに書く位、新規では書けない
      • インフラ(AWS)を触っていた期間も1年位あった
    • デザインをコードに起こすフェーズは未経験

本題(Flutterで難しそうだと感じているところ)

デザインから見た目をコーディングするところ

Webでもやってこなかったところなので、どういう考え方でやっていけばいいかわからない

Firestore

  • NoSQL未経験なのと、KVSも使ったことないので不安
  • モバイルアプリにとってDBがどのように使われているかがピンとこない
    • API側でDBに繋いでいるアプリケーションしか触ったこと無いので

状態管理

  • ちゃんと勉強したことがない概念なので不安
    • 業務でReduxを触ったときに混乱した記憶がある

CI/CD

右も左も分からないレベル

おわりに

未来の自分がいい記事を書いてくれることを期待しています さあ、勉強頑張るぞ...!!

【Flutter】企業系アプリによくある機能を考えてみる

これの内容を実際作るとしたらどうするかという話

www.iroiro-engineer.com

はじめに

How to記事ではなく、個人メモになります。

目次

  • 会員証
  • 通知
  • ポイント機能
  • クーポン
  • ニュース
  • 店舗検索

会員証

  • 会員番号のバーコード
  • ポイント機能がついていることも

作り方を考えてみる

だいたいパッケージ化されている

pub.dev

ぱっと見これでいけそう

感想

会員証の画面は意外と簡素

通知

アプリ内で見れるものだけでなく、push通知を伴うことが多い印象

作り方を考えてみる

アプリ内通知

  • APIでサーバーから取ってくるだけ
  • 遷移先
    • アプリ内の任意の画面
    • 内部ブラウザで開く
    • 外部ブラウザで開く

push通知

  • FCM
  • 遷移先
    • アプリ内の任意の画面
    • 内部ブラウザで開く
    • (外部ブラウザ)
      • push通知をタップしたときにいきなりブラウザが開くパターンはあまり見ない気がする

技術面

Flutterのパッケージで見つかったのはこれ

pub.dev

Railsで送信するならこれ(gem)

github.com

fcmという名前のgemもあるが、公式ではないらしく遅いらしい

自分が昔作ったときはこれ

zenn.dev

感想

自分的にはサーバーサイドで送信するイメージなので、Flutterパッケージは何をしているんだろうと気になる

ポイント機能

会員証画面と同じこともある印象

作り方を考えてみる

...と言っても、サーバーサイドで作ってアプリ側では表示だけしている印象

以下2つのAPIをサーバーサイドで作ってアプリ側で叩く

  • 現在のポイント情報API
    • 残高
    • 総獲得
      • 会員ランクなどがある場合、次のランクまでいくつ
  • クーポンや別のアプリのポイントに交換できる場合そのためのAPI

感想

アプリ側でできることの種類はもっと色々アプリ入れて観察してみないとわからない

クーポン

  • 所持クーポン一覧
  • クーポン使用 これもサーバーサイドで作ってアプリ側は表示だけの印象なので略

ニュース

webviewが多いイメージ webviewでなくとも、API叩いて表示している印象

  • 以下のAPIを作る
    • ニュース一覧
    • ニュース詳細

店舗検索

webでよくある、セレクトボックスから都道府県選択して...という形式もあるが、 googlemapにピンが立っている形式をよく見かける印象

これはどうやっているのかイメージできない。 店舗情報はAPIサーバーが持っている気がするから、それをどうにかしてマッピングする方法があるのだろう。

自分のレベルではまだわからない。

まとめ

  • 考えてみると面白い
  • 案外シンプル
  • サーバーサイドありきな構成が多いのかもしれない
    • 管理用にCMS作るだろうし当然っちゃ当然