麦芽を支える技術

麦芽(ばくが、英語:malt)とは、麦、特に大麦の種子を発芽させたもので、ビール、ウイスキー、水飴の原料となる。(Wikipediaより)

React Native for WebでPWAやってみた

この記事はPWA Advent Calendar 2019の15日目の記事です。

はじめに

私は普段は主にネイティブアプリ(iOS/Android)開発をしておりまして、Webフロント周りは久しく触っていないのですが、ちょっと最近React Nativeを触る機会があり、その文脈で「React Native for Web」というワードを目にしたことで「これでPWAもいけるのでは?」と思い、軽い気持ちで書いてみることにしました。

PWAはWebの技術を使ってネイティブアプリに近い体験を作り出せるところが大きな特徴なので、今回のように元々React Nativeでネイティブアプリを作れる環境からPWAアプリを作るというのは少し違和感はありますが、ちょうど昨日のアドベントカレンダーでdennougorillaさんが書いてくれているように、ネイティブアプリの考え方をWebに持ち込み、シングルコードで多くのプラットフォームで動作するアプリを作れる点は大きなメリットあると考えています。

qiita.com

なお、今回紹介するReact Native for Webは必ずしもネイティブアプリは必要とせず、単独Web開発ツールとしても使えますので、HTMLをあまり書く必要なくWebアプリ、PWAアプリを開発する方法の一つとして「なるほど、こういう開発技術もあるんだな」という感じに捉えてもらっても良いかなと思います。

React Native for Webとは?

Webフロントの世界で生まれたのReact.jsの考えをネイティブアプリの世界に持ち込んだものがReact Nativeなわけですが、それを更にWebの世界に持ち込んだものがReact Native for Webです。

続きを読む

fastlaneでビルドしたiOSアプリがBitrise Shipに反映されない問題の対処

この記事はBitrise Advent Calenderの14日目の記事です。

はじめに

普段はiOSアプリをメインとしたネイティブアプリ開発を生業としておりまして、Bitriseさんには結構長らく大変お世話になっております。(振り返ってみると2015年に使い始めたらしくもう4年...!)

なので、Bitriseの情報は普段から割とチェックしているのですが、最近Bitriseの新しい機能として「Ship」が追加されました。

blog.bitrise.io

ShipはこれまでBitriseのStepとして存在していた「Deploy to Bitrise.io」Stepのアドオンという形で提供されており、これまで通りのStep使いながらもバージョン管理やストアメタ情報など含めた本番アップロードなどの機能を新たに利用することができるようになります。

利用に当たっては、以下のドキュメントの通りいくつかの手順で設定すれば簡単に始められます。

devcenter.bitrise.io

ただここでちょっと私のケースだと詰まってしまったので、その事象と対応について今回ご紹介します。

続きを読む

AndroidのversionCode, versionNameをインクリメントするGradleタスク

AndroidプロジェクトのversionCodeやversionNameは、だいたい1つずつインクリメントしていくだけの場合が多く、コマンド1発で書き換えられるようにしておけば、将来的にCIなどでこの辺の作業を自動化させる時にも楽だよね、というヤツです。

iOSプロジェクトだとfastlaneの increment_build_numberincrement_version_number のActionで同様のことができますが、手元のAndroidプロジェクトだとfastlaneは使わずGradleでほとんどのビルドタスクを実行しているので、自前のGradleタスクとして用意しました。

続きを読む

Xcode11からja_JPロケールのNumberFormatter出力でnbspが入るようになった

事の発端

元々以下のように数値を通貨形式の文字列フォーマットに変換する処理のユニットテスト書いてあったんだけど、Xcode11にしてからテストが失敗するようになってしまった。

let target = 1000
XCTAssertEqual(target.yenFormattedString, "1,000円")  // "1,000 円" is not equal "1,000円"

ちなみに、ここでやっている .yenFormattedString は以下のようなIntのExtension。

extension Int {
    var yenFormattedString: String {
        let formatter = NumberFormatter()
        formatter.locale = Locale(identifier: "ja_JP")
        formatter.numberStyle = .currencyPlural
        return numberFormatter.string(from: self as NSNumber) ?? ""
    }
}

"1,000 円" is not equal "1,000円" と言われているので、の前に半角スペース入るように変わったのかな?と思い、テストを修正してみたら以下のようになった。

let target = 1000
XCTAssertEqual(target.yenFormattedString, "1,000 円")  // "1,000 円" is not equal "1,000 円"

"1,000 円" is not equal "1,000 円" ??

続きを読む

iOSシミュレータのアプリをコマンドラインからDeepLink起動する

いつも忘れるのでメモ。

iOSシミュレータ内のSafari使ってDeepLink起動もできるけど、コマンドラインの方がサクサク叩ける。

Xcode Command Line Tools設定

以降で使用する xcrun コマンドの利用のため、もしXcode Command Line ToolsにXcodeアプリが指定されていなければ設定。

[設定場所]

  • Xcode
    • Preferences
      • Locations

f:id:asmz0:20190718113743p:plain:w600

続きを読む

OK Google, iOSアプリをデプロイして

はじめに

こないだGCPUGの仙台版が立ち上がりまして、同じ会社のメンバーも運営に参画していることもあって、せっかくなので盛り上げに貢献すべく、ぺちコン仙台、XDUG仙台に続き、またしても畑違いな身分でLTで話してきました。

gcpug-sendai.connpass.com

直近の開発案件で、サーバサイドは全面的にGCPを使っているのですが、自分はiOS側の開発がメインで直接的には使用してない(若干Firebaseで近いところに触るくらい)ので、今回は完全に趣味で作ってみたネタ系です。

続きを読む

Adobe XD・Zeplin・Xcode連携で、iOSアプリのデザイン実装フロー効率化

はじめに

もう先月の話になりますが、Adobe XDのユーザーグループが開催しているAdobe XDやUI/UXに関わる勉強・交流会「仙台 Adobe XD Meeting #3(今は名前変わってAdobe XD ユーザーグループ仙台 )」に参加してきまして、LT枠でちょっとだけお話ししてきました。

xd-sendai.connpass.com

Adobe XDはアプリの簡単なワイヤーフレーム的なやつとその画面遷移を作ったくらいしか経験なくて、どちらかと言うと社内のデザイナーさんがXDでゴリゴリ作ったアプリUIデザインを共有してもらい、自分はXcodeで本実装と言うのをやってました。

なので、XDの便利な使い方とかはそんなに話せないけど、そこからアプリに本実装するまでの流れとかをiOSエンジニア観点で話すことはできるかな、と思い今回LTに手を上げてみました。

続きを読む