好きなものだけ書く。ポジティブに。

好きなことを楽しく。プログラミング、写真、音楽、ガジェットとか。

Durable Functionsで引数を受け取る方法を解説

おつかれさまです!のぶじゃすです。

Azure 関数アプリ で Timeoutの制限や複雑な処理を整理するために Durable Functions という機能があります。とても便利なのでAzure 関数アプリを使っている人は是非試してみると良いと思います。

learn.microsoft.com

今回は、Durable Functions でHTTPトリガーやService Bugトリガーで処理に引数に受け渡す方法が明記されている記事が見つけられなかったので備忘録的な記事です。さくっと結論のみ書きますー

引数の渡し方

learn.microsoft.com

const client = df.getClient(context);
const instanceId: string = await client.startNew(
  request.params.orchestratorName,
  { input: "input string!" }
);

startNew 関数*1 の第2引数の input プロパティ*2 にJSONシリアライザブルな値を渡せる。

引数の受け取り方

const someHandler: OrchestrationHandler = function* (
  context: OrchestrationContext
) {
  const input = context.df.getInput();

OrchestrationContextdf.getInput() 関数*3 で渡した値が受け取れる。

アクセスありがとうございます🙇‍♂️

ここまで読んでいただき誠にありがとうございました。もしこの記事が役に立ったらはてブや、Twitterのフォローしていただけると大変喜びます😊

BigQuery の js api ライブラリ @google-cloud/bigquery を JWT 認証で実行したい

おつかれさまです!のぶじゃすです。

@google-cloud/bigquery を実行する際にJWT認証で実行出来るようにしたい。サービスアカウントを使って利用していたりするとJWT認証じゃないと厳しい場面が発生する。(credentialファイルを置けないとか)

「@google-cloud/bigquery を JWT 認証で実行したい」という文字が書いてある。鍵をもってこちらを見ている女性が背景。

具体的に今回やりたいのは、googleapis と同様に

const auth = new google.auth.JWT(
  env.GOOGLE_EMAIL,
  undefined,
  env.GOOGLE_PRIVATE_KEY, 
  [
    "https://www.googleapis.com/auth/drive",
  ]
);
export const driveService = google.drive({ version: "v3", auth });

みたいな感じで BigQuery のAPIを実行したい。

結論

まずは結論から。これで動きました。調べた事を後述していますので気になる方はどうぞ。

const auth = new google.auth.JWT(
  env.GOOGLE_EMAIL,
  undefined,
  env.GOOGLE_PRIVATE_KEY, 
  [
    "https://www.googleapis.com/auth/drive",
  ]
);

new BigQuery({
  authClient: auth,
  projectId: `{env.GCP_PROJECT_ID}`
});

BigQuery の API がどうなっているのか調べてみる

BigQuery クラスの constructor は @google-cloud/commonGoogleAuthOptions を継承している
export interface BigQueryOptions extends GoogleAuthOptions

nodejs-bigquery/src/bigquery.ts at main · googleapis/nodejs-bigquery · GitHub

@google-cloud/commonGoogleAuthOptions の実体は google-auth-libraryGoogleAuthOptions
export {GoogleAuthOptions} from 'google-auth-library';

nodejs-common/src/index.ts at main · googleapis/nodejs-common · GitHub

google-auth-libraryGoogleAuthOptions の実体はこれ

google-auth-library-nodejs/src/auth/googleauth.ts at main · googleapis/google-auth-library-nodejs · GitHub

googleapis のAPIがどうなっているのか調べてみる

Drive クラスの constructorgoogleapis-commonGlobalOptions を利用している
 constructor(options: GlobalOptions, google?: GoogleConfigurable) {

google-api-nodejs-client/src/apis/drive/v3.ts at main · googleapis/google-api-nodejs-client · GitHub

googleapis-commonGlobalOptionsauthgoogle-auth-library の OAuth2Client や GoogleAuth を渡せる
export interface GlobalOptions extends MethodOptions {
  auth?: GoogleAuth | OAuth2Client | BaseExternalAccountClient | string;
}

nodejs-googleapis-common/src/api.ts at main · googleapis/nodejs-googleapis-common · GitHub

new google.auth を探ってみる

googleapis-commonAuthPlusgoogle.auth の実体
export class GoogleApis extends GeneratedAPIs {
  private _discovery = new Discovery({debug: false, includePrivate: false});
  auth = new AuthPlus();

google-api-nodejs-client/src/googleapis.ts at main · googleapis/google-api-nodejs-client · GitHub

AuthPlusJWTgoogle-auth-libraryJWT
export class AuthPlus extends GoogleAuth {
  JWT = JWT;

nodejs-googleapis-common/src/authplus.ts at main · googleapis/nodejs-googleapis-common · GitHub

google-auth-libraryJWTOAuth2Client の継承
export class JWT extends OAuth2Client

google-auth-library-nodejs/src/auth/jwtclient.ts at main · googleapis/google-auth-library-nodejs · GitHub

ということで GoogleAuthOptionsJWT を渡せる手段がありそうか探してみる

export interface GoogleAuthOptions<T extends AuthClient = JSONClient> {
  /**
   * An `AuthClient` to use
   */
  authClient?: T;

JSONClient という型がある

export type JSONClient =
  | JWT
  | UserRefreshClient
  | BaseExternalAccountClient
  | ExternalAccountAuthorizedUserClient
  | Impersonated;

JWT が渡せそうだ!

動いた

ということで以下のようにしたら動きました。納得感持って繋げられたのでよかった。

new BigQuery({
  authClient: auth,
  projectId: `{env.GCP_PROJECT_ID}`
});

アクセスありがとうございます🙇‍♂️

ここまで読んでいただき誠にありがとうございました。もしこの記事が役に立ったらはてブや、Twitterのフォローしていただけると大変喜びます😊

Next.JS App Router でURLクエリー文字列を取得するのはクライアントコンポーネントとpage.tsxで出来る

きっとURLクエリー文字列を使ってなにか魅力的なものを検索していたりするはずの女性のイラスト
なにか検索していますね。クエリー文字列をきっと使っているはずです

おつかれさまです!のぶじゃすです。

URLクエリー文字列を取得する方法

https://example.com/anypage?search=abcdefg の様なURLのクエリー文字列をNext.jsのApp Routerを用いて取得する方法について解説します。

Next.JS App Router ではクエリー文字列を取得する2つの主な方法があります。

  1. クライアントコンポーネントで useSearchParams を使う方法
  2. page.tsxsearchParams を参照する方法

Next.jsのApp Router導入後、ClientとServerの両方を考慮してコーディングする必要が出てきました。 書き味が少し違うので何が何に対比していて、どこに制限があるのかを意識しないと素早く書けないです。 この辺りが頭に入っているのといないのでは、設計時に見通せる世界が広がります。

1. クライアントコンポーネントで useSearchParams を使う方法

"use client";
import { useSearchParams } from "next/navigation";

export const PresentationSearchPanel = () => {
  const sParams = useSearchParams();
  const search = sParams.get("search");
  return <div>{search}</div>;
};

詳細についてはNext.js公式ドキュメントを参照してください。 nextjs.org

2. page.tsxで searchParams を参照する方法

export default async function AnyPage({
  searchParams,
}: {
  searchParams: z.infer<typeof formSchema>;
}) {
  return <div>{searchParams.search}</div>
});

詳細についてはNext.js公式ドキュメントを参照してください。 nextjs.org

検証環境

package.json 抜粋

"next": "^13.5.2",

next.config.mjs 抜粋

const config = {
  reactStrictMode: true,
  experimental: {
    serverActions: true,
  },
};

アクセスありがとうございます🙇‍♂️

ここまで読んでいただき誠にありがとうございました。もしこの記事が役に立ったらはてブや、Twitterのフォローしていただけると大変喜びます😊

Phaser 3.60.0 で六角形(Hexagon)を描く方法、あるいは本業以外のプログラミングを書くということ

Phaserを試してみたくてやってみた。 sinとcosが思い出せなくて泣いた。手触り感的には結構悪くない。きっとこういうメソッドあるんだろうなーが当たる確率が高い。

stability.ai で生成したプログラミングで正六角形を書く女性
stability.ai で生成したプログラミングで正六角形を書く女性

全然まったく、決して本業とは関係ない。本業はそれなりに忙しくさせてもらっているが、スキマで違うプログラミングを書いたりすると気分転換になるし楽しい。

完成がいつになるのかは分からない。それでもいい。本業でも発想が柔らかくなったりいい効果も少しだけある。

「今日は夜1時間だけやれるように時間作るぞ」と考えて生きていると少し前のめりに動ける。ほんのちょっとだけ潤う。

See the Pen Phaser Hexagon Example by noblejasper (@noblejasper) on CodePen.

ads.txtを設置するために、ブログのURLを変更してFirebaseを利用してリダイレクトする方法

おつかれさまです!のぶじゃすです。

先日当ブログのドメインを y-i.jp から www.y-i.jp に変更しました。ads.txtを設置するのを試してみたかったのでやってみました。もし似たような状況の方とかいらっしゃれば参考になると嬉しいです。

うまく行かなくて頭を抱えている男性のイラスト
ads.txt 置けないじゃん・・・

前提

ads.txt とは、Google AdSense などのアドネットワーク関連の設定で、パブリッシャーが承認したネットワークから広告が配信される事を担保するものです。詳しくはGoogle AdSense ヘルプ をごらんください。

ads.txt はルートドメインの直下に設置する必要があります。今回の場合 https://y-i.jp/ads.txt でアクセス出来る必要がありました。

ルートドメインは私の場合ははてなブログに直接設定していました。これが今回の対応をしなければならなくなった元凶です。

はてなブログでは公式でads.txtを配信する機能は提供していません。はてなヘルプで言及されています

今回クリアしないといけない課題は2つ

  1. ルートドメインでads.txtを配信する
  2. ブログはそのまま稼働させる

ドメインは変更しないとどうしようもなさそう

前提の上で解決方法を考えてみます。はてなブログでads.txtを配信する機能はないので、自力で配信する必要がある。しかし自力で配信するとなるとレンタルサーバーなど何らかのWebサーバで配信しないといけない。

URLをそのままでなんとかするのは難しそう。ではドメインは https://www.y-i.jp/ に変更するようにしよう。しかし旧URLからのリダイレクトをどう処理するか。

最近ホスティングだと、Xserverとかよく聞く気がする。しかしもちろん費用はかかる。とりあえずFirebaseなら動作確認したりテストする分には無料。その後もアクセス数が増えたりしない限りは無料。

という事で気楽にFirebaseで試してみます。

続きを読む

【2022年読んでよかったマンガ】異世界転生系マンガ縛り

最近はSalesforceエンジニアと名乗ることの多いのぶじゃすです。 昨年【2021年読んでよかったマンガ】異世界転生系マンガのおすすめ!と言うタイトルでブログを書いたけど、今年も同じテーマで年末なので異世界転生系漫画縛りで読んでよかったマンガを紹介していきます。

去年の方が豊作だった気もしますし、去年から続けて読んでいるマンガは今年は紹介していません。もしよければ去年の記事もどうぞ

www.y-i.jp

年末年始に時間があるよーって方や、次読むマンガを探しているかたなどぜひお供になれたら嬉しいです。

Kindle Paperwhiteから iPad mini に乗り換えました

今年はiPad miniを購入して去年より多く読んでいたんですけど、とにかくiPad miniオススメです。軽い、画面がきれい、KindleもLINEマンガも、もちろん少年ジャンプ+も読める。

サイズがちょうどいいですね。小さいショルダーバックに入るしリュックサックのはじっこにも入る。手で持ち歩くのも辛くないサイズ。iPad ProとかiPad Airだとやっぱり大きくてちょっと本を読むために持ち歩くにしては自分には合っていなかった。電子書籍やマンガを読む人にはオススメです。

逆に絵を書いたり、動画編集したり画像編集したりする人はiPad Proを使ったり、Mac使ったりするほうがいいです。

ネタバレに気をつけて書きます

できるだけネタバレの無いように書きます。無いように無いように・・・

とはいえ私が面白いと思ったポイントを書く上でどうしても外せない設定とかは書いちゃってます。どうしても知りたくない人は見ないほうがいいですw

今年も独断と偏見で評価をつけていきます

去年と同様に、独断と偏見で評価してみようと思います。

評価項目は以下です。私が異世界転生モノのマンガを読む時に「面白い」と思うマンガはこういうポイントを見て判断しているのではないか。という項目でつけてみます。

絵が好き

絵が好きな度合いです。

読みやすい絵、読みたくなる絵、細部まで見直したくなる絵などを基準に独断と偏見で評価してみます。

転生活用度

異世界転生モノなので、転生している事のメリットの使い方や活用している具合は大切。

「なるほど!」と思える転生スキルの使いこなしや納得感、転生している前提がどれぐらい生かされているのかを独断と偏見で評価してみます。

意表をつくストーリー

異世界転生モノに限らずですが、予定調和を壊してくれるマンガが個人的にすごく好きです。

先が予想できなかったり、予想を裏切ってくれるストーリーが設計されているかどうかを独断と偏見で評価してみます。

独自性

異世界転生モノは類似しているストーリーが多いです。独自なストーリーや設定があるとワクワクして読めます。

ワクワク具合を独断と偏見で評価してみます。

今回評価したマンガ一覧

今年も点数を付けてみました。やっぱりバラけて面白かったです。

作品名 絵好 転活 スト 独自
異世界魔王と召喚少女の奴隷魔術 3 4 3 3
回復術士のやり直し 3 5 4 3
ふかふかダンジョン攻略記(略) 5 1 3 5
本好きの下剋上 5 4 3 5
じい様が行く 4 3 1 4
僕の部屋がダンジョンの休憩所になってしまった件 4 3 2 4
聖者無双 4 1 4 5
神達に拾われた男 5 3 5 4
宝くじで40億当たったんだけど異世界に移住する 4 5 3 4
転生貴族、鑑定スキルで成り上がる(略) 2 4 4 3
異世界のんびり農家 4 4 4 5

異世界魔王と召喚少女の奴隷魔術

評価項目 レート
絵が好き ★★★☆☆
転生活用度 ★★★★☆
意表をつくストーリー ★★★☆☆
独自性 ★★★☆☆

ネトゲで魔王をプレイしていてそのまま魔王に転生する話です。ハーレムものなので、アダルトな描写が少しあります。 登場する女の子キャラはとても可愛い。前半はストーリー展開も良く引き込まれる場面もありました。 正直なところ、最近は少し展開に物足りなさがあり、ここからなんとか盛り上げ直していただきたい気持ちが強いです。

ストーリーはシンプルで、派手なバトルも多いので軽い気持ちで読めます。

回復術士のやり直し

評価項目 レート
絵が好き ★★★☆☆
転生活用度 ★★★★★
意表をつくストーリー ★★★★☆
独自性 ★★★☆☆

ムナクソ注意です。復讐のために過去に転生してやり返す。 転生前の記憶と回復術士スキルを駆使して困難をクリアしつつ復讐する。アダルト描写もあり。鬱展開もあり。 転生を最大限に活用していたり、問題の解決方法で意表をつくポイントがとても好きです。

ちょっと異世界転生と違う作品でした。まあ広い範囲の転生系ってことで許してくださいw

ふかふかダンジョン攻略記 〜俺の異世界転生冒険譚〜

評価項目 レート
絵が好き ★★★★★
転生活用度 ★☆☆☆☆
意表をつくストーリー ★★★☆☆
独自性 ★★★★★

かなり好きな作品です。キャラも背景もよく描き込まれていて絵に見ごたえがあって好きです。鬱展開やヌード描写アダルト描写も多いので読む人は選ぶ感じがします。 私はストーリーと世界観が面白くて読んでいます。異世界転生系ですが基本的にあまりチートは無く知恵と努力でダンジョンを攻略する話です。なんと表現すればいいのか難しいのですが「リアル感」が高いです。世界観が練り込まれており武器や亜人種の設定がとても細かいです。 死にものぐるいの敵ってそりゃ必死になるよね。こわ!って場面がめっちゃワクワクします。

ちょっと精神的にウッとなる場面もあるので苦手な人は注意です。

本好きの下剋上

評価項目 レート
絵が好き ★★★★★
転生活用度 ★★★★☆
意表をつくストーリー ★★★☆☆
独自性 ★★★★★

モノづくりが好きな人はハマると思う。私はとても好きです。アニメ化もされてますね。あまり背景を調べたりしていないのですが、なぜか一部から四部が同時に並行で連載されているようです。 一〜四部は時系列で並んでいて四部が一番主人公が大人です。私は同時に読んでいますが特にネタバレ感を感じないまま違和感なく読めてしまっています。原作は五部まであるようなのでまだまだ先が楽しみです。

キャラクターがとても魅力的で、比較的平和なストーリーです。生き死にが関連する事件は少ない。

主人公が本が大好きで転生した先の本がほとんど無い世界でたくさんの本を自分が読むために本を広めていくというのが大筋。その過程で転生前の知識を活用しながら工夫と努力を重ねて目的に邁進していきます。主人公が体が弱く体力が少ないのが読んでいて応援したくなります。

第一部

第二部

第三部

第四部

じい様が行く

評価項目 レート
絵が好き ★★★★☆
転生活用度 ★★★☆☆
意表をつくストーリー ★☆☆☆☆
独自性 ★★★★☆

おじいさんがおじいさんのまま異世界転生します。じい様が常に沈着冷静で落ち着いているのがとてもホッコリします。温かいお話が多いです。 転生を活用している部分もありますが、転生の活用というよりは年の功みたいな部分で問題を解決したりするのが面白いです。 人が傷つかない話が多いので読む人をあまり選ばない優しい異世界転生系のマンガです。

僕の部屋がダンジョンの休憩所になってしまった件

評価項目 レート
絵が好き ★★★★☆
転生活用度 ★★★☆☆
意表をつくストーリー ★★☆☆☆
独自性 ★★★★☆

これ転生系じゃないかもしれないw 自分の部屋が転生というか、異世界と繋がります。 異世界のダンジョンとつながって異世界の冒険者たちと交流しワイワイする話です。ちょっとエッチ。 似たような設定のマンガもありそうですが、異世界の描写や設定がしっかり出来ているので読んでいて引き込まれます。スライムがかわいい。

聖者無双

評価項目 レート
絵が好き ★★★★☆
転生活用度 ★☆☆☆☆
意表をつくストーリー ★★★★☆
独自性 ★★★★★

ブラック企業で鍛えられたサラリーマンが転生してブラック治癒士に転生します。ブラック具合を楽しみながら成長していく主人公を見守るのが楽しい。 努力を惜しまずひたすらにスキルや体を痛めまくって鍛えていく姿が面白おかしく、成長にワクワクしながら読めます。 細かいギャグもキャラを引き立てるものが多く、キャラの個性も立っていて魅力的です。

神達に拾われた男

評価項目 レート
絵が好き ★★★★★
転生活用度 ★★★☆☆
意表をつくストーリー ★★★★★
独自性 ★★★★☆

スライムが可愛い。主人公の少年も可愛い。基本的には優しい話です。登場人物が可愛い人やモンスターが多く魅力的です。キュンキュンします。 転生前のガチムチなブラックサラリーマンがあんなに可愛い少年に転生するなんて。ほっこりします。スライムが喋らないけど可愛い。

宝くじで40億当たったんだけど異世界に移住する

評価項目 レート
絵が好き ★★★★☆
転生活用度 ★★★★★
意表をつくストーリー ★★★☆☆
独自性 ★★★★☆

去年なんでレビューしなかったのかが思い出せません。個人的名作です。異世界と現実世界を自由に行き来出来てお金たくさん持っててチートする系の異世界転生系マンガです。 類似の作品はいくつもありますが、キャラの魅力と転生の活用のさせ方がすごい好きです。本を渡して現地の人に勉強させるとかチームワークが広がっていく感じとか好きです。 あとバレッタさんがひたむきで、かつめっちゃ賢くて可愛いです。

転生貴族、鑑定スキルで成り上がる ~弱小領地を受け継いだので、優秀な人材を増やしていたら、最強領地になってた~

評価項目 レート
絵が好き ★★☆☆☆
転生活用度 ★★★★☆
意表をつくストーリー ★★★★☆
独自性 ★★★☆☆

転生というか鑑定スキルがメインですね。鑑定スキルで人材発掘して成り上がっていく話です。類似作品はありますがこの作品は戦略だったり、努力だったりが多く描かれています。 主人公の葛藤や周りの人間ドラマも引き込まれるストーリーが多くて、気づいたら読み終わってしまう系マンガです。 バランス感のよいマンガだと思います。

異世界のんびり農家

評価項目 レート
絵が好き ★★★★☆
転生活用度 ★★★★☆
意表をつくストーリー ★★★★☆
独自性 ★★★★★

異世界転生してスローライフを送ったり農家をやったり、村を作ったり系です。この作品は主人公がモンスターと仲良くなっていって、人とモンスターとその他大勢と村を作ります。 蜘蛛とか犬とか可愛いです。ドタバタ感と村が拡大していくワクワク感が面白いです。 読みやすい絵のテイストで楽しく読めるマンガです。

まとめ

いかがでしたでしょうか?興味があるマンガが1つでも増えたら嬉しいです。ぜひ年末年始のお供に。

最後にもう1度まとめを載せておきます。

作品名 絵好 転活 スト 独自
異世界魔王と召喚少女の奴隷魔術 3 4 3 3
回復術士のやり直し 3 5 4 3
ふかふかダンジョン攻略記(略) 5 1 3 5
本好きの下剋上 5 4 3 5
じい様が行く 4 3 1 4
僕の部屋がダンジョンの休憩所になってしまった件 4 3 2 4
聖者無双 4 1 4 5
神達に拾われた男 5 3 5 4
宝くじで40億当たったんだけど異世界に移住する 4 5 3 4
転生貴族、鑑定スキルで成り上がる(略) 2 4 4 3
異世界のんびり農家 4 4 4 5

皆々様、良いお年をー🤩