サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
qiita.com/Nkzn
Flutter Webが来ました🎊 https://github.com/flutter/flutter_web ひとまず手元で examples/hello_world が動くところまでできています。 Flutterに関してまったくセットアップしていない環境から始めたのですが、3点ほど引っかかるところがあったのでメモしておきます。 Flutter素人がやった手順なので、大間違いなところがありそうです。有識者の方、ツッコミお待ちしております。 全体の流れ 大まかなセットアップの流れとしては、次のような感じになります。 普通のFlutterのセットアップ手順でセットアップする ひとまず flutter doctor コマンドが通ればOKです Android StudioやVSCodeのセットアップはしなくても、たぶん flutter precache の手順まで実施できてればいけそうな気も
もう語り尽くされた感もあるのですが、async/awaitで複数のPromiseを待ち合わせる場合のやり方についてです。 Chrome 69のDevToolsのコンソールで動作確認を行いました。 3行で Promise.all() を使う方法があるよね awaitの配列を作る方法もあるみたいなんだ おもしろいね(小並感) Promise.all()をawaitする 筆者がよくやるのは、Promise.all()をawaitする方法です。 async function hoge() { const start = Date.now(); // 時間計測用 // sleep的なやつ const p11 = new Promise(resolve => setTimeout(resolve, 1000)); const p12 = new Promise(resolve => setTimeou
近年のGoogle Play運営は、審査こそないものの怪しいアプリをストアから削除する運用が進んでいます。大昔に作ったアプリがいつの間にか公開停止になっていた、なんてことも増えてきました。 さて今回は、Google Playからポリシー違反の連絡が来たけれども、心当たりがなかったので調べてみたら面倒くさい対応を回避できた、というお話です。 3行で プライバシーポリシーを置かないままストアにリリースしたアプリでデフォルトのままFirebaseを使っていると運営に刺されます プライバシーポリシーを置くか、Firebaseが広告IDを取得するのをやめさせる必要があります AndroidManifest.xmlにオプションを指定すると広告IDの取得をやめさせられます(この記事で本当に伝えたいこと) 事の発端 Google Playの運営から、こんなメールが届きました。 要約すると お前のアプリでは
2019年8月追記: Expo SnackがWeb対応したことを受けて、React Native公式ドキュメントのライブプレビューはreact-native-web-playerからExpo Snackに戻りました。 http://facebook.github.io/react-native/docs/activityindicator 記事の内容は古くなってしまいましたが、React Native for Webが内部で使われていることに変更はありません。 React Native公式ドキュメントのプレビューを支える技術 React Nativeの公式ドキュメントでは、コンポーネントの実際の表示をWeb上で確認できるプレビューが用意されています。 少し前まではAppetize.ioが使われていて、実機のスクリーンキャストらしきものを見ることができていました。今でもExpo Snackは
v0.57でいろいろ変わるという記事を書きましたが、本当にMetro BundlerがTypeScriptを食べてくれるのか半信半疑だったので、実際に試してみました。 結論 ビルドだけならゼロコンフィグに近い感じで行けました。型チェックをする場合はMSのブログでのやり方よりも、もうひと工夫必要です。 サンプルコード v0.57.0-rc.3でプロジェクトを作ってみました。これをベースにお話します。 前提条件:Babel 7のTypeScript対応の仕組み React NativeのTypeScript対応は、Babel 7のTypeScript対応に乗っかった形で実現されています。 ここで重要なのは、 Babelはtscを内部で実行するわけではない ということです。 今回導入された@babel/preset-typescriptは、FlowTypeの babel-plugin-flow-
次にリリースされるReact Native v0.57のリリースノートを読んでいたら、それなりに大きな変更が多かったので、心の準備をする意味で概要を感想文をメモしておきます。 Accessibility API Updates まずは比較的マイルドなものから。 スマートフォンを使うすべての人々が、よく見える目や、画面に触れる指、聞こえる耳を持っているわけではありません。AndroidやiOSには、そういった方々が情報を感じたり扱ったりできるように、アクセシビリティAPIと呼ばれるものを通じて通常のUIを拡張する手段が用意されています。画像のメタデータとしてテキストを定義しておいて、スマートフォンの音声読み上げ機能の対象にする、などの機能があります。 以前からRNにもアクセシビリティAPIへのアクセス方法は存在していましたが、今回v0.57で入るのはその改善です。RN公式ブログでその詳細が紹
なかざんです。ウォーターセルという新潟の会社でアグリノートという農業向けアプリを作っています。 業務で使う構成のPoCとして、Webとモバイルネイティブの両方で動く、React Nativeのサンプルプロジェクトを作ってみたので、そこで得られた知見をご紹介します。 つくったもの 私たちが愛してやまないJetBrains製IDEのアイコンとボタンを並べて、ボタンを押すと製品ページに行けるアプリです。押したときにはピコッと鳴ります。 ソースコードはこちら。 https://github.com/Nkzn/react-native-multi-target-sample ネイティブ版はこんな感じです。 Webアプリ版はこんな感じ。 見てもらったほうが早い 今回は実物を触ってもらいやすい環境が作れたので、実際に触ってみたほうが雰囲気がつかみやすいと思います。 ネイティブ版 ネイティブ版はExpoで
この記事は @akameco さんの次の記事を前提にしています。 async関数においてtry/catchではなくawait/catchパターンを活用する 他のケースでも嬉しい書き方はできるだろうか、試してみよう、という性質の記事です。 前提として共有しておきたい感情 忌々しいletを使わずconstで書けるの最高 try-catchの冗長さがなくなるの最高 題材:複数のエラーオブジェクトを使ってエラーハンドリングをしたいケースに対応したい 前述した記事の本筋のうれしみは↑のふたつだったと思うのですが、エラーハンドリングのパターンとしては、大別して次の2パターンが紹介されていたように思います。 エラーの有無に関わらず必ず値を返す使い方 個別のPromiseに対してエラーハンドリングを行う使い方
みんな大好きチャットワークが念願のWebhook&OAuthに対応しました。 ビジネスチャット「チャットワーク」がWebhookとOAuthに対応、オープンβ版の提供開始〜2018年春までにクラウドサービス17社18サービスとデータ連携開始予定〜 ~ ChatWorkニュースリリース あまりにも喜びが高まったので、React Native Androidで投稿サンプルを作ってみました。 もちべ 通知系のbotで最も使われるであろう投稿権限(rooms.messages:write)のみのアプリケーションを作ってみたい OAuthとモバイルアプリって相性悪かった気がするけどどうだったか思い出したい たまにはReact NativeでAndroidだけに寄った素振りがしたい やったこと アプリケーション登録ページでサンプルアプリを登録 ↑でリダイレクトURLに登録したやつ(https://ww
FragmentからActivityのメソッドを呼び出したい(コールバックしたい)こと、ありますよね。 二昔前には幾度か議論になりましたが、概ね以下のような内容だったかと思います。 Y.A.M の 雑記帳: Fragment から Activity にコールバックする方法 当時、私の中で(面倒くさいながらも)有力だったのは、「インターフェースを被せることで特定のActivityへの依存性を排除しつつ、基本的には getActivity() で逐一取ってきて、キャストの成否をちゃんとチェックする」という方針でした。 今回ご紹介するものも方針はまったく同じなのですが、Java8のOptionalと高階関数を使うと少しスッキリ書けるよ、というお話です。 コード public class HogeFragment extends Fragment { // 略 private void onCli
先日、@kiriminさんからこんなツイートがありました。 onCreateでのaddFragmentでFragment増殖するやつ三現場連続で遭遇しててBaseActivityにaddFragmentメソッドを生やすところまで同じなのでどこかに悪いサンプルがあるのではと疑ってる — きりみん (@kirimin) 2017年8月9日 ピンとこなかったので記事で見てみたいです(無茶振り) — なかざん@🍺 (@Nkzn) 2017年8月9日 というわけで、雑に煽ってみたら記事を書いていただけました ありがとうございました FragmentをonCreateで何も考えずにaddして増殖するケースが後を絶たない件 実はこの内容、4年くらい前からベストプラクティスとしてやっていました。特にアウトプットしたことがなかった(たぶん)ので、この機会に知っていることを吐き出しておこうと思います。 ※こ
リリースビルドがtransformClassesAndResourcesWithProguardForReleaseの時点で失敗する問題Android Warning: Exception while processing task java.io.IOException: java.lang.IllegalArgumentException: Overflow of unsigned short value [66077] :app:transformClassesAndResourcesWithProguardForRelease FAILED こういうのが出てきちゃう方向け。 2017.6.1追記 Gradle Plugin for Android v3.0.0-alpha2ではProguard v5.3.3が採用されていることを確認しました。 tldr; Proguard v5.3
SkypeチームがReactで真のクロスプラットフォーム目指してる記事から10日ほど経ったわけですが、未だにひとつもQiitaに記事がないのはどういうことだ! 寂しい! ということでとりあえず動かしてみました。 TL;DR ハロワを動かしただけです(Windowsは環境の作り方を知らなくて断念) 全プラットフォーム同時にLive ReloadしたかったけどWeb版は最低限のwebpack設定しかなくて自分でHMRを組み込みました UI実装のトライアンドエラー環境としては面白い試みだなあと思いました デモ動画 ReactXP HelloWorld Live Reloading Demo - YouTube ソースコード https://github.com/Nkzn/reactxp-livereload-example モチベーション ReactXP自体はReactDOMとReact Nat
2016年9月ごろに早期アクセス機能とオープンベータが統合されて挙動が変わっていたようで、ちょっとびっくりしたので調べた内容を残しておきます。 オープンベータ(オープンアルファ)の古い挙動を期待して、検索してきただけの人にはインストールできないから大丈夫、という運用をしている方は見直しをご検討ください。 過去に提供されていたオープンベータ機能 「 所定のリンクから 誰でも参加できる一般公開テストを実施します。」 2015年の夏に公開されたオープンベータ機能はこんな感じでした。 GoogleのAndroidアプリのベータテストの更新で、Google+への登録が必要なくなる | TechCrunch Japan オプトイン用のURLを踏んで、リンク先で「テスターになる」のボタンを押したユーザーだけがアプリをダウンロードできる、というスタイルです。 オプトインURLはパッケージ名から推測可能なの
Google I/O 2016で話題になったInstant Appsについて、興味を持っているデベロッパー向けの事前情報が公開されました。じっくり読みがてら翻訳しましたので公開させてもらおうと思います。 読みながら気になったのですが、フレームワーク名としての「Instant Apps」という言葉とは別に、従来のインストールして使うアプリと対比するようなニュアンスで「instant app」という言葉が使われていました。これについては、本文中で区別し、「インスタントアプリ」と訳しています。ご了承ください。 Preparing Your App(皆さんのアプリを準備する) Instant Apps is in an Early Access Program with a limited set of developers. Instant Appsは限られた開発者に向けたアーリーアクセスプログ
Picassoがplaceholderのままで画像を表示してくれない問題に見舞われました。 TL;DR Picassoで画像が表示されないことがあるよ into(Target) を使ってると起こるよ Picassoはtargetを弱参照で保持してるからGCでtargetがなくなりやすいよ targetを強参照で保持するか、そもそもinto(ImageView, Callback)使おうな 問題 Picassoで画像をロードしたらついでに何かしたいパターンってあるじゃないですか。 ImageView mImageView; // (略) Picasso.with(this) .load(imageUrl) .placeholder(R.drawable.image_loading) .error(R.drawable.image_loading_failed) .into(new Targe
みなさん、CIしてますか。 AndroidアプリのCI環境となるマシンには、Android SDKがインストールされていないといけません。今までみなさんは、どのように環境構築を行っていたでしょうか。 Gradle Plugin for Android v2.2.0で、CI環境構築が少しだけ簡単になりそうなので、紹介したいと思います。 一般的な方法 CI職人の諸兄ならば、CI環境へAndroid SDKをダウンロードするために、いずれかの方法を使ったことがあるのではないでしょうか。 android update sdk --no-ui --filter ... なコマンドをcron実行しておく Jenkins環境ならAndroid Emulator PluginにAndroid SDKを管理してもらう GradleにJakeWharton/sdk-manager-pluginを適用して、実行
初めてTypeScriptでReact(tsx)を書いてみたのですが、ジェネリクスが上手く使われていて好きな感じでした。 import * as React from "react"; interface Props { count: number; } interface State {} class App extends React.Component<Props, State> { render() { return ( <div>{this.props.count}</div> ); } } 通常はReact独自の型定義記法であるPropTypesを書いていくのですが、DefinitelyTypedの型定義ファイルが良い味を出してくれているおかげで、TypeScriptのエコシステムの範疇でPropTypesやStateの型定義を行うことができます。 実例 どのくらい良い味が出て
いろんなツールがあって技術選択に迷うので、定点観測的にいま思っていることをざっくり書いてみました。 TL;DR ひたすらスピードを求められるプロトタイピングなどはCordova(Ionicなど含む) Cordova上でReactで開発した資産を引き継ぎたいみたいな前提があってユーザーレスポンスを改善するならReact Native 時間がかかってもいいからとにかく安定させたいならネイティブ 学習コストが高くてもよくて開発スピードと安定性を両立するならXamarin 私はネイティブが一番好きです。 はじめに 「AndroidとiOSアプリを両方作ってくれ」という要件はよくある話ですが、ベンチャーで新しいサービスをモリモリと立ち上げている中での両対応となると、両方共ネイティブで作っていくわけにはいかないこともあります。 そもそもそんなにバランス良くAndroidエンジニアとiOSエンジニアは集
2017.8.1追記 正規表現がマッチしないケースを発見したので、gistのほうを更新しました。使ってくださっている方は手元のスクリプトを更新してください。 はじめに Pull RequestやMerge Request以外の方法ではmasterやdevelopブランチへのマージを許さない感じの各種ワークフローを実践していると、自然とリリースノートの中身ってMergedのリストになりますよね。 私も仕事でよく社内向けのリリースノートを作るのですが、手作業でMerge Requestのリストを作るのが結構手間だったわけです。 というわけでRubyの練習がてら作ったのがgit-mr-diffです。 Getting Started install gistからコピペしてきてパスの通った場所に置いてください。Rubyが必要ですがMacの人は気にしなくていいです。Windowsでの動作確認はしていま
Gitlab Merge Request Builder Pluginは、GitlabにMergeRequestが作られたことを検出してジョブを実行するJenkinsプラグインです。 MRがマージされた後のソースコードをワークスペースに作成してからビルド(テスト)を実行できるため、マージ元ブランチだけに行うよりも精度の高いCIができます。 また、該当のMRのコメント欄に結果を投稿してくれる機能もあります。(このへんの魅力は後述のくりにっきさんを見るとわかりやすいです) Reference J( 'ー`)し「たかしへ。Gitlab Merge Request Builder Pluginを入れてみたわよ」 - くりにっき 本家ドキュメント この記事で説明しないこと くりにっきさんで説明されていることは極力説明しません。 本記事では、くりにっきさんと本家のドキュメントを見比べながら試行した内容
ActivityのExtraやFragmentのArgumentを設定する責務は、呼び出される側に持たせたほうがいいんじゃねーのという提案Android あるActivityから別のActivityを呼び出すときや、Fragmentを新規に生成する時、ExtraやArgumentと呼ばれる、Bundle型の初期値を渡すことができます。 このとき、「渡す側」と「渡される側」に別れるわけですが、どちらがどこまで相手のことを知っていなければならないか?という関心ごとは、分業していく上で重要なファクターになります。 この辺のやり方についてデファクトスタンダード的なものが無いように思えたので、今回は私が現在良いと思っているスタイルを紹介したいと思います。 (5/19追記:Twitterで色々と御意見をお聞きしまして、その後また自分の中でのベストプラクティスが変わってきています。記事末尾の追記も是非お
※本記事は、長岡IT開発者勉強会#40 初心者Dayで話す内容のドラフトとして書かれたものです。 ※本記事は、2015年2月時点での技術に関する時事ネタを多分に含んでいます。ご留意ください。 2/26 この記事のメイキング記事を書きました。 はじめに Androidが世に出た2008年秋からもうすぐ7年が経とうとしています。日本で初めてのAndroidスマートフォンであるHT-03Aがドコモから発売された2009年夏からは、もうすぐ6年です。「ツートップ戦略」が記憶に新しいXperiaやGalaxy Sシリーズが出始めたのは2010年ですから、そこからも5年は経とうとしています。 十年一昔、という言葉がありますが、Web方面に関わっていると三年一昔という言葉が脳裏をよぎることすらあります。7年足らずの歴史しか持たないAndroidにとっても、3年という時間は半生と呼ぶに差し支えないものでし
2015.6.9追記:Android Studio 1.2 + Robolectric 3の組み合わせが良さそうなので、この記事をあまり鵜呑みにしないでください(参考) Androiderの皆さん、テストしてますか? 今回は、UIテストが幸せになるEspresso 2.0と、ユニットテストが幸せになるRobolectricをAndroid Studio的に自然な形で併存させるための設定をご紹介します。 ゴールとしては、下記のような表示になります。 Android Studioではあまり見かけないテストフォルダの配置に「おっ」と思った方は、次項を読み飛ばしてその先へどうぞ。 前提知識:これまでのテスト UIテストをモリモリ書いてきた諸兄は、Espressoと仲良くしていらっしゃることと思います。Support Libraryの一部としてEspresso 2.0が配布されるようになり、JUni
※本記事はWaterCell Developer's Blogからの転載です。 Google Cloud Messaging for Androidの勉強をしていたところ、User Notificationsのドキュメントに分かりづらい部分があってハマったので、備忘録として書き残しておこうと思います。 というわけで、User Notificationsがどんな機能なのかは説明しません。知りたい方は、ドキュメントをお読みください。 User Notificationsを使わずにpush配信する まずは、普通のpush配信のやり方。公式資料でも丁寧に紹介されていますし、日本語記事も多くあります。 GCM HTTP Connection Server | Android Developers [改訂版]Google Cloud Messaging (GCM) でプッシュ配信する[Android]
Javaで「小数第N位以下を四捨五入したい」「ある桁はゼロ埋めしたいけど、あとは桁があるときだけ表示したい」などなど、数値を文字列で表現したい場合には、 java.text.DecimalFormat を使うのが便利ですね。 今回はこのDecimalFormatで四捨五入が失敗するバグを見つけたので紹介します。 環境 $ java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) import java.text.DecimalFormat; import java.math.RoundingMode; class Java8DecimalFo
このページを最初にブックマークしてみませんか?
『@Nkznのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く