Google DriveからGoogle Cloud Storageにファイルをコピーする(Python編)

こんにちは。 ピリカ開発チームの九鬼です。 以前、Google DriveからGoogle Cloud Storageにファイルをコピーする方法[^1]を本ブログで紹介しました。当該記事はNode.js向けの内容だったのですが、Python向けに対応できたのでその方法を紹介いたします。

Cloud Storage for Firebaseで、bucketごとにセキュリティルールを割り当てる

こんにちは、ピリカ開発チームの九鬼です。 Firebaseを使ったサービスに関して、サービスによっては複数bucketを使いたい場合があります。デフォルトだと単一bucketしかセキュリティルールを割り当てられないのですが、.firebasercおよびfirebase.jsonの設定…

GCP Workflows使って調査結果のcsvデータ作成+調査結果のヒートマップhtmlのビルドを行う仕組みを作った話

こんにちは、ピリカ開発チームの九鬼です。 弊社が提供しているタカノメサービスについて、GCP Workflowsを用いることで調査結果の出力フローを自動化することができました。本稿では、構築したワークフローの概要を紹介いたします。

Cloud Runにおいて、動画中の物体検出フローを安定化させるまでに試行錯誤した話

こんにちは、ピリカ開発チームの九鬼です。 弊社が開発しているタカノメ自動車版では、クラウド上にて撮影動画中のごみを検知しています(下図例)。 本機能を安定化するにあたり、開発環境において試行錯誤した経緯を共有いたします。

Sign in with Apple: 2022年6月のアカウント削除機能に対する要件の適応に対応した話(リフレッシュトークンの取得とトークンの無効化)

iOS

こんにちは、開発チームの冨田です。 今日はSign in with Appleにおける、サーバー側でのリフレッシュトークンの取得と、トークンの無効化処理について書きます。 これは2022年6月から適応される新しいガイドラインにて、アカウント削除機能に対する要件が新…

Microsoft IntuneからiPhoneおよびiPadにアプリ専用の設定を配信する

こんにちは、ピリカ開発チームの九鬼です。 モバイル端末管理ツールの一種であるMicrosoft Intuneから、iPhoneにアプリ専用の設定値を配信することがありました。備忘録として、Intune側での設定方法とiOSアプリでの読み出し方を記載します。

JetBrains MonoをVisual Studio Codeで使用する

こんにちは、ピリカ開発の冨田です。 今日はJetBrainsがオープンソースとして配布しているフォントJetBrainsMonoをVisualStudioCode(VSCode)で利用する方法を書きます。

Firestoreでドキュメントの有効期限付けつつ、特定のフィールド値を持つドキュメントのみをクエリできるようにする

こんにちは、ピリカ開発チームの九鬼です。 Firestoreについて、ドキュメントに有効期限を付けつつ、フィールドが特定値を持つドキュメントのみ取得できるようにしたいことがあります。 セキュリティルールと複合クエリを使って実現できたので、その方法をま…

Go言語製Let's Encryptクライアントlegoをライブラリとして使う

こんにちは。 ピリカ開発部の伊藤です。 ピリカではほとんどのサービスでGCPやAWSが発行するHTTPS証明書を使っていますが、見える化ページと呼ばれる、自治体や企業など、一定の範囲内でのごみ拾い活動を集約しているサービスで使っているワイルドカード証明…

自分らしく、使ってて楽しいターミナルのカスタマイズ

こんにちは、ピリカの豊川です。 入社してそろそろ半年が経ちますので、以前から書こうと思ってたブログ記事を書いてみます。 これは、Macのデフォルトのプロンプトでターミナル操作した時のスクショです。特に難しいことはしてませんが、なんとなく何をやっ…

gspread(およびgspread_dataframe)の利用方法について

pythonからスプレッドシートを触るとき、gspread/gspread_dataframeなどのライブラリを利用することができます。 これらライブラリについて内部実装を見ながら、どのような使い方をするかまとめました。

Pipenvでの基本的な環境構築

こんにちは。ピリカ開発部の冨田です。 ピリカではPythonパッケージの管理にPipenvを利用しています。 今回は、Pipenvで環境構築を行うときに、よく使用するコマンドをまとめました。 公式ドキュメント

Xcode 13で作ったプロジェクトでbitriseでのCIビルドに対応する

こんにちは、ピリカ開発チームの九鬼です。 最近、新規のiOSアプリをxcode13を使って開発しました。Xcode 13でbitriseのCIビルドについて設定方法が見つからなかったので、備忘録として展開します。

iPadOSの審査ではEthernet接続が使われている

iOS

こんにちは、ピリカの伊藤です。 先日、iOSアプリを審査に出したところ「iPadOSで起動時に通信エラーで進めない」とリジェクトされました。 これまでこのようなリジェクトを受けたことはなく、特にサーバーも問題なく動作していました。 では、なぜ審査落ち…

Macでビデオ会議(画面共有)中に手元のiPhoneの画面を共有する方法

Mac

こんにちは、ピリカの冨田です。 今日は、Macの画面に、手元のiPhoneの画面をリアルタイムで表示する方法をご紹介します。 PCでビデオ会議中に、相手にiPhoneの画面共有をしたいことはありませんか? 例えば、アプリの操作方法を相手にリアルタイムでお伝え…

Mac(M1 CPU)で、互換性のあるpyenv+pipenvの環境を作る

こんにちは、ピリカ開発チームの九鬼です。 SNSピリカやタカノメのサービスでは、バックエンドで度々Pythonを使用しています。その中でいくつかPythonスクリプトがあり、バージョンが3.7系列や3.9系列などが含まれます。 しかしながら、Mac(M1 CPU)からarm64…

GAE/Pythonでサービスアカウントキーファイルを使わないようにした

こんにちは。ピリカ開発チームの伊藤です。 GCPの各種サーバーレスサービスにアクセスするには、認証情報が必要となります。App EngineやCloud Functions上で動作している場合は、GCPの各種ライブラリを使っていれば特に何もしなくても認証が通った状態とな…

Androidアプリ Realmでモデルパラメータを追加するとき、過去バージョン全てに渡ってパラメータ有無を考慮する必要があった話

SNSピリカのAndroidアプリについて、段階公開していたv5.4.13, v5.4.14リリースで起動クラッシュが発生する問題がありました。v5.4.13でRealmのバージョンアップおよびRealm操作周りの役割分離を行っており、そのなかでのマイグレーション処理の不備が原因で…

GoogleAppEngineでCloud SchedulerからのHTTPリクエストのみを受け付ける

こんにちは、ピリカの開発の冨田です。 ピリカのごみ拾いSNS「ピリカ」は、Google Cloud Platformを利用しています。 その中で、定期実行させたい処理を、Cloud Scheduler→AppEngineで行っています。 Cloud SchedulerからApp Engineに対してHTTPリクエストを…

Pythonのインターン(Intering)・文字列インターン(String Intering)

こんにちは、ピリカ開発チームの冨田です。 Pythonにはインターン(Intern, Intering)という仕組みがあります。 特に文字列のインターンはとても複雑です。 ここでは、インターンとは何か、Pythonでインターンが利用されるのはどの様な場合か、文字列がインタ…

GeoPandasをGoogle App Engine(GAE)上で動かすためには、libspatialindexを事前ビルドする必要がある

※ 2021年4月時点での検証内容であり、ライブラリ側の更新により解消済みの可能性があります。 GAE上でGeoPandasを動かすには、libspatialindexをDebian系x64 OS上でビルドして依存関係に含めておく必要があります。本記事ではその方法を共有します。

Cloud NDBのredisキャッシュでredis-namespaceを使うとキャッシュキーのコリジョンを起こすことがある件

こんにちは、ピリカ開発チームの九鬼です。 SNSピリカのサービスでは、データ永続化用にCloud NDBを使用しています。また、データ取得のスループットを高めるためCloud Memorystore for Redisを利用しています。 SNSピリカ データベース周り概念図 そこで、…

pythonの真偽値と条件分岐

こんにちは、ピリカの冨田です。 pythonで、Noneかどうか、空文字列かどうか、空配列かどうか、空辞書かどうかの判定とその時の処理の書き分けで迷いがちの冨田です。 それらを正しく書き分けるためには、何がNoneで何がTrue/Falseで、それらがどうやってやi…

リモートワークで固定IPするために: L2TP/IPsec VPNを設定する

ピリカでは開発環境へのアクセスを保護するための一環としてIP制限をしていますが、ピリカという会社は元々リモートで仕事をしている人が多く、またオフィスのIPアドレスは動的IPの時代が続いていました。 そこで、各自のIPアドレスを固定化するためにVPNや…

ローカルでPub/Sub, Cloud Functionsを同時に動かしながら動作確認する

こんにちは、ピリカ開発チームの九鬼です。 SNSピリカのサービスでは App EngineからPub/SubにメッセージをPublish → サブスクリプションフィルタで絞り込み → Cloud FunctionsからCloud Tasks経由で再度App Engineに戻して処理するケースがあります。 SNSピ…

DooD(Docker outside of Docker)で、Docker Composeで一部コンテナを逐次アップデートする

こんにちは、ピリカ開発チームの九鬼です。 Docker Composeで複数コンテナからなるサービスを動かしている最中に、一部コンテナをアップデートしたいことがあります*1。 そこで、本記事ではその方法を紹介します(もし、さらに良い方法がありましたらぜひ伺い…

リモートワークで固定IPするために: VPNの認証のためにRADIUSサーバーをつくる

こんにちは。 ピリカ開発チームの伊藤です。 ピリカでは開発環境へのアクセスを保護するための一環としてIP制限をしていますが、ピリカという会社は元々リモートで仕事をしている人が多く、またオフィスのIPアドレスは動的IPの時代が続いていました。 そこで…

TensorFlow 2.xでObject Detection APIを使うにはTensorFlowバージョンを揃える必要がある話

こんにちは、ピリカ開発チームの九鬼(niccari)です。 機械学習周りで物体検出したいとき、TensorFlowとともにObject Detection APIを利用することがあります。 Object Detection API側のアップデートで新規Docker環境が動かなくなったことがありました。

BigQueryのデータを定期的にGooleスプレッドシートに出力する方法

こんにちは、ピリカ開発の冨田です。 今日は、BigQueryのデータを定期的にGooleスプレッドシートに出力する方法について書きたいと思います。 今回使用するツールはOWOX BI BIgQuery Reportsという無料のアドオンツールです。 というのも、GoogleのConnected…

Google Cloud Functionsで、GitHubのprivateリポジトリにある自作ライブラリを使う方法

初めまして、ピリカ開発チームの九鬼と申します。 Google Cloud Functions(以後、GCF)でアプリをデプロイするとき、Cloud Build環境でSSHキーにアクセスできません。そのため、GitHubのprivateリポジトリにアクセスできないので、アプリのソースコード上に自…