Category:

Firebase Hosting に Google Analyticsを導入

Firebase Hosting で公開しているこのブログに Google Analytics を導入する手順を紹介します。 Firebaseのドキュメント を元に対応していこうと思います。 Google Analyticsを有効化 Firebase管理画面で、⚙ > 統合 > Google Analytics と辿って、Google Analyticsを有効化します。 Firebaseのマイアプリ追加 Firebase管理画面で、⚙ > 全般 > マイアプリ と辿って、Webアプリを追加します。 設定は適宜入力していけば良いです。 設定の途中で、以下のようなスクリプトを自分のWebサイトのタグの下部に貼り付けるように言われます。 一旦コードをコピーして作業を完了させます。 WordPress側にスクリプトを追加 WordPressを利用している場合、Insert Continue Reading

Posted On :
Category:

WordPress で構築したサイトをFirebase Hosting

年明けに思い立って、 はてブロ をやめて新しく個人ブログを立ち上げることにしました。初投稿はこのブログの仕組みについて紹介したいと思います。 注)本記事中のhttp://localhost:8000の表記はポートが本来半角であるべきなのに全角になっています。これは半角のままだと、静的ファイル化に利用している Simply Static プラグインが、公開用の rinoguchi.net に変換してしまう挙動を回避するためのものです。 動機 12月のGoogle検索のアルゴリズムアップデートではてブロ上の個人ブログのPV数が3〜4割程度落ちました。 ブログ開設以来順調に伸びていたPV数が初めて落ち込んだので、何か対策をしたくなったのですが、コンテンツ自体は変える気が起きないので、以下の点を改善しようと考えました。 改善したい点1: ページの表示速度 現状の表示速度は PageSpeed In Continue Reading

Posted On :
Category:

「実践ドメイン駆動設計」から学ぶDDDの実装入門の読了メモ

これは ドメイン駆動設計 Advent Calendar 2020 の16日目の記事です。 「実践ドメイン駆動設計」から学ぶDDDの実装入門 を輪読会で読了したので、内容を箇条書きでメモしておきます。 個人的解釈を多分に含むため、導入する際には実際に書籍を読んで判断してもらえればと思います。 1. 「DDDへの誘い」〜ドメイン駆動設計のメリットと始め方〜 DDDとは DDDとは 「高品質」のソフトウェアを設計する手法 「高品質」とは、ビジネス的にも成功していること言うこと 「事業を理解し、チームの知識を一つにまとめること」を重視し、「ユビキタス言語」というチーム内の共通語でプログラムを実装する DDDのメリット プログラマとドメインエキスパートが「共通言語」で視点を合わせて会話する=>顧客視点に繋がる チームで業務知識を共有し、理想像を追求できる 「設計=コード」を実現し、実装時の課 Continue Reading

Posted On :

pyppeteerでファイルをダウンロード

昨日、puppeteerでファイルをダウンロードする という記事を書いたのですが、puppeteerのpythonに移植した pyppeteer で同じようにファイルダウンロードをやってみました。 pyppeteer自体の使い方は以前記事を書いてるので、そちらをご覧ください。 pyppeteerの使い方 実装 puppeteerで試した中で一番筋が良さそうだった「ダウンロードのrequestをキャプチャして、同じ内容で別途requestを送信する」という方法を実装してみました。 from typing import Union, List, Dict import asyncio from uuid import uuid4 from mimetypes import guess_extension from pyppeteer.launcher import launch from py Continue Reading

Posted On :
Category:

puppeteerでファイルをダウンロード

この記事は Node.js Advent Calendar 2020 の2日目の記事です。 puppeteer でファイルダウンロードする方法はこちらの issue がまだopenなことからも分かるように、すんなり実現できる公式の方法はなさそうです。 とはいっても、スクレイピングをしてて、ファイルダウンロードしたいケースはあるわけで、実際に試してみようと思います。 前準備 とりあえず、puppeteerをインストールします。puppeteer以外に必要なライブラリは、個別に追記しています。 npm install puppeteer –save 実行方法 サンプルソースを適当な名前のファイル(たとえばsample.js)にコピペしてnodeコマンドで実行するだけで、実際に動かすことができます。 node sample.js ファイルをダウンロードする 方法1【△】: 単純にブラウザのファ Continue Reading

Posted On :

Webブラウザ上でニコニコ動画風にコメントを表示

コロナの影響で、リモートでの勉強会が増えてきましたが、プレゼン中に反応が少なくて寂しいなぁと感じることがあります。 でも意外にチャットは盛り上がってることが多いので、画面共有しているブラウザ上にニコニコ動画風にメッセージをアニメーション表示する機能を作ってみることにしました。 やりたいこと プレゼンターが会議URLを発行する 参加者は会議URLからコメントを入力する プレゼンターのWebブラウザ上に、参加者のコメントがニコニコ動画風にアニメーション表示される アーキテクチャ 検討の結果、以下の技術を採用することにしました。 ブラウザ上でコメント常時受付(フロント、プレゼンター側) => WebSocket(socket.io) 任意のページ上にコメント表示(フロント、プレゼンター側) => ブックマークレット(良いものができたらChrome拡張化して公開) コメント常時受付(サ Continue Reading

Posted On :
Category:

GitLab-CIのTips

GitLab CIのTips的なものを記載していきます。 環境(stg / prd)毎に異なるレジストリにpushする 実際の運用では、stagingとproductionのDockerイメージを、異なるレジストリで管理することもあると思います。そのようなケースではEnvironment scopeを使うと良いと思います。 まず、以下のイメージのように同名のカスタム変数を異なるEnvironment scope(stg / prd)で登録します。 その上で、.gitlab-ci.ymlを以下のようにします。 元々のbuildの内容は.buildとしてテンプレート化する build_stgとbuild_prdを新たに作って.buildをextendする タグ名$CI_COMMIT_TAGのパターンマッチで、x.y.zの形式なら環境名をprdとし、それ以外なら環境名をstgとする(それにより読 Continue Reading

Posted On :
Category:

GitLab CI + kaniko でDockerイメージをビルド

業務ではGITリポジトリとしてGitLabを使ってるのですが、ローカルPCでDockerイメージを作成する運用だと ローカルの変更が混じってしまう可能性がある イメージを作成するタイミングがあいまいだし、作成忘れがあったりする などの問題があり微妙だったので、GitLabにタグ(1.5.2など)をプッシュしたタイミングで、自動的にDockerイメージを作成してGCRにビルドさせることにしました。 少し前に 会社のブログ で kaniko を使うケースを紹介してくれていたので、やってみることにしました。 GitLabでDockerイメージをビルドする方法の候補 改めてGitLabの ドキュメント を見てみると、以下のように書いてあります。 There are three methods to enable the use of docker build and docker run duri Continue Reading

Posted On :
Category:

標準モジュールunittestでpythonのテストを書く

Pythonで本格的?にテストを書き始めました。標準ライブラリの unittest が普通にまあまあ使いやすいので、使い方をまとめていきます。 基本的な書き方 基本は以下の構造になります。 import unittest class TestSimple(unittest.TestCase): @classmethod def setUpClass(cls): """各クラスが実行される直前に一度だけ呼び出される""" print('setUpClass called.') @classmethod def tearDownClass(cls): """各クラスが実行された直後に一度だけ呼び出される""" print('tearDownCla Continue Reading

Posted On :
Category:

Pythonでasyncioを使った非同期処理

Pythonで非同期処理を実装する場合、 asyncio モジュールを使うのが一般的だと思いますが、並行処理をさせたり、ネストしたりするケースは多少気をつけることもあったので、メモ的にやり方を残しておきます。 シーケンシャルな非同期処理 まずはシンプルなケースとして、3サイト(qiita, google, yahoo)の合計6ページについて、pyppeteer(chromiumを起動して非同期スクレイピングするライブラリ)を使って、HTMLを取得するケースを書いてみました。 from pyppeteer.browser import Browser from pyppeteer.page import Page from pyppeteer.launcher import launch from typing import List import datetime from asyncio Continue Reading

Posted On :