お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
Node.js::その他サービス::GitHub::GitHub Actions

Node.jsのスクリプトを適当に書き次のようなWorkflowsを記述することで実行できる。勿論Dockerイメージを作ってそこから立ち上げることもできるので好みの問題。直に呼べる分、取り回しは楽だと思う

name: hoge
description: hoge
inputs:
  GITHUB_TOKEN:
    description: 'Workflowsを実行するリポジトリのGITHUB_TOKEN'
    required: true
on:
  workflow_call:
runs:
  using: node20
  main: dist/index.js

inputs:outputs:を記述すれば入出力の引数も定義できる。

inputs.GITHUB_TOKENについて

これを書いておくとoctokitを使ってGitHubのAPIを叩けるようになる。普通は何かAPIを叩くはずなので書いておいた方が良い。

以下は一例。

const github = require('@actions/github');
const core = require('@actions/core');

async function run() {
    const token = core.getInput('GITHUB_TOKEN');
    const octokit = github.getOctokit(token);

    const { data: pullRequest } = await octokit.rest.pulls.get({
        owner: 'octokit',
        repo: 'rest.js',
        pull_number: 123,
        mediaType: {
          format: 'diff'
        }
    });

    console.log(pullRequest);
}

参考

投稿日:
言語::PHPミドルウェア::RDBMS::SQLite

"hoge", "piyo", "fuga"のように綺麗なCSVであるという前提。CSVファイルが巨大なので行読み込みする。

<?php

$db = new PDO('sqlite:./hoge.db');

$db->beginTransaction();
$fp = fopen("hoge.csv", "r");
$idx = 0;

if($fp){
  while ($line = fgets($fp)) {
    $row = createRow($line);
    $db->exec(
      'INSERT INTO hogehoge (`foo`, `bar`, `baz`)'
      . ' VALUES '
      .'(' . '"' . $row['foo'] .'", ' . '"' . $row['bar'] .'", ' . '"' . $row['baz'] .'"' . ')'
    );
    $idx++;
    echo $idx . "\n";
  }
}

fclose($fp);
$db->commit();

function createRow($text) {
  $r1 = preg_replace('/"/', '', $text);
  $row = explode(',', $r1);

  return [
    'foo' => $row[0],
    'bar' => $row[1],
    'baz' => $row[2],
  ];
}

トランザクションを張りっぱなしだが、exec毎にトランザクションを張りなおすと劇的に遅くなるのでやめたほうがいい(恐らく毎回同期処理でWriteが走っているのだと思う)

投稿日:
ジャンル::雑記

普段書籍はKindleで読んでいるのだが、今回本棚を買った。

実は以前は本棚を持っており、100冊程度を蔵書していた。中学生のころから買ったコミックや文庫、CD、同人誌やグッズなどを収めていた。しかし、その当時は部屋の収納容量が限界に達していた。衣類を置く場所がほとんどなかったのだ。

正直今でも私は服を持っていないほうで、衣装ケースも多くはもっていないが、当時は一個しかもっていなかった。それでも何とかなっていたのだが、もう少し環境を良くしたいと思っていた。その時に障害となったのが本棚の存在だった。

7年ほど前だろうか、ミニマリストを目指していた私は、この時に本棚を撤去する決断をした。持っていた本やグッズ、CDを全て手放し、生活を優先する判断をしたのだ。そして持っていた本などは電子化という手段で解決した。

しかし、去る6月21日、これを変える出来事があった。私はその日、クラユカバとクラメルカガリを鑑賞するために淡路島は洲本市にある洲本オリオンに訪れていた。そして鑑賞を終え、売店を眺めていると一冊の本が目に入った。「R15+じゃダメですか?」という本だ。

20240714_075433.jpg

私は映画に関係ないグッズがあるのは珍しいと思い、この本を買うことにした。物理本を手放し、本棚を処分した今、本を置く場所などないのにである。

そして私は「R15+じゃダメですか?」を読み、続編を全て紙の本で買うことにした。理由としてはここ数年、紙の本を大切にしたいと思っていたからだ。電子書籍はいつか見れなくなる可能性がある。それに私はGAFAが好きではない。デジタル赤字や、GAFAによる支配、表現規制、日本の独立性のことを考えると紙で本を買ったほうが良いというのが個人的な結論だった。

勿論それだけではない。紙の本はモノによっては特殊印刷が施してあり、凝った装丁のものがあるし、何より希少性があるからだ。紙の本はいつか絶版になり、そうなると手に入らなくなる。そうなれば潰えた歴史というか、時代を自分の手で持っておくことができるというステータスみたいなものが手に入る。

他にも紙の本は読んでいて手触りが心地よいとか、いろいろなところがある。

しかしでは本棚をどうやって部屋に置くかだが、答えは単純だった。私は7年前に住んでいた狭い部屋を引き払い、今はそれより広い部屋に住んでいる。使いもしないギターを置いているスペースを空ければ本棚程度は置ける。その考えは「R15+じゃダメですか?」を手に取った瞬間に電光石火のごとく頭にひらめいた。

それにトラペジウムグッズを無駄に買いすぎてしまった結果、置き場に困っていたグッズの収納先として棚が欲しかったのもあり、このアイデアはまさにジャストマッチだった。

そして私は早速、900冊程度入ると謳う、山善の本棚を注文した。まさか宅配ボックスには入るまいと思っていたのだが、困ったことに宅配ボックスに入っていたので部屋まで運ぶのが大変だった。以下の写真を見るとわかるのだが、中々デカいし、普通に重い。30kgくらいはある。

20240712_223405.jpg
20240712_224133.jpg

昨日これを頑張って組み立てて、物理本置き場を作ることにやっと成功した。以下は本棚を組み上げ、本が入っていく様子である。そもそも蔵書がないので現状は置き場所に困っていた適当なものを突っ込んでいる。

20240713_140219.jpg
20240713_143528.jpg
20240714_003223.jpg

しかし、この状態でも本棚に本が収まっている光景はいいものだ。これまで本屋に行っても本を買えないでいたもどかしさも解消される。

というので今後は物理本を買い集めていこうと思う。手放してしまった本も可能な範囲で取り戻していきたいところだが、残念ながらほとんど絶版だと思うので、中古に頼ることになるだろう。キノの旅まで絶版になっているのは正直驚いた。

因みに当時本棚にあったものでも、まだ手放していないものはわずかにあり、水月と月箱だけは残してある。この二つだけはどうしても手放したくなかったからだ。

20240714_090615.jpg

恐らく水月については、私の部屋にあるもので、最も古い存在だ。水月は非常に大切なので水月だけは死ぬまで持っておくと思う。という意味では、かつて保有していたオフィシャルファンブックも残しておくべきだったが、あれは大きかったので致し方ないか…。

投稿日:
映画::トラペジウムジャンル::アニメ

トラペジウムの上映館が増え続け、遂に兵庫県の一部界隈で待望されていた洲本オリオンが上映館に加わった。

洲本オリオンでは8/30(金)からの上映になり、これは現在公表されている上映予定では最も後ろにあるものだ。恐らく五月から続いた上映は洲本オリオンが最後になるのではないだろうか?まさかの離島上映である。

しかし5月10日に公開されてから今まで、そこまで客入りがよくないであろう作品にもかかわらず、上映館が増え、8月を超えても上映が続くというのは狂気の沙汰を超えて、もはや夢や幻の類であるように思うし、なんというか、作中のテーマを現実世界に顕現させているような、そんな気さえしてくる。

一体トラペジウムはどこまで続くのか。いや流石に洲本オリオンで終わりになるような気はするが、期待と楽しみの尽きない作品である。

前回の記事から増えた上映館

トラペジウムという最高の狂気を書いたときから更に増えた上映館。

映画館 上映開始 所在地
キネマ旬報シアター 8/3(土)~8/16(金) 千葉県柏市
扇町キネマ 7/26(金)から 天満(大阪)
洲本オリオン 8/30(金)から 洲本(淡路島)
Shimane Cinema ONOZAWA 8/14(水)~8/18(日) 島根県益田市

上映館・上映予定館一覧

手作業で作っているので抜け漏れがあるかも?

映画館 上映開始
シネマ太陽函館 7/5(金)から
ディノスシネマズ室蘭 7/5(金)から
T・ジョイ稚内 7/5(金)から
シネマヴィレッジ8・イオン柏 7/5(金)から
フォーラム東根 7/5(金)から
新宿バルト9 上映中
シネマネコ 7/12(金)から
イオンシネマ多摩センター 7/12(金)から
川崎チネチッタ 上映中
イオンシネマ茅ヶ崎 7/5(金)から
京成ローザ10 上映中
イオンシネマ市川妙典 7/12(金)から
キネマ旬報シアター 8/3(土)~8/16(金)
イオンシネマ守谷 7/5(金)から
岡谷スカラ座 7/5(金)から
飯田センゲキシネマズ 7/5(金)から
豊川コロナシネマワールド 7/5(金)から
金沢コロナシネマワールド 7/5(金)から
扇町キネマ 7/26(金)から
舞鶴八千代館 7/5(金)から
塚口サンサン劇場 7/12(金)から
洲本オリオン 8/30(金)から
福山エーガル8シネマズ 上映中
Shimane Cinema ONOZAWA 8/14(水)~8/18(日)
シネマ・スクエア7 7/5(金)から
イオンシネマ防府 7/12(金)から
イオンシネマ今治新都市 7/12(金)から
小倉コロナシネマワールド 7/5(金)から
イオンシネマ戸畑 7/5(金)から
イオンシネマ大野城 7/5(金)から
佐世保シネマボックス太陽 7/5(金)から
シネマライカム 上映中

ライカムはずっと上映していてすごく良心的だと思う。島外に出てまで見るのはどう考えても難しいので、沖縄の良心と呼んでもいいだろう。

あとがき

本日塚口サンサン劇場でのセカンド上映を鑑賞したことでトラペジウムの鑑賞回数が10回になり、歴代の鑑賞作品の中で初の鑑賞回数二桁に達してしまった。洲本オリオンでも見る予定なので11回まではいきそうだ。

paste-image-2024-38-13_0-37-0-417.png

投稿日:
技術::プロトコル::HTTP

日頃仕事で開発をしていたり、そこら辺のWebサービスの振る舞いを眺めていると不思議というか、奇妙というか、端的に言うとありえないリクエストを投げているものを見かける。

一例としては次のようなものを見たことがある。

フロントエンドで第三者サービスに問い合わせクライアントIPを取得し、それをバックエンドに送る

これの問題点はまずクライアントのIPを幾らでも捏造できることだ。

クライアントからバックエンドに投げている値など幾らでも偽装できるため、その中にクライアントのIPアドレスを含めるのは何の価値もない。

他にも第三者のサービスを利用しているので、そこが落ちてたり、仕様変更があったりすると使えなくなる。

サーバー間のHTTP通信でクライアントのIPをREMOTE_ADDRヘッダーに入れて送る

具体的にはSSRを利用しているNext.jsのサーバーサイドレンダリング側で、クライアントのIPを取得し、後ろにいるAPサーバーにHTTPで投げるときにREMOTE_ADDRヘッダーに入れて送っていたケースだ。curlで表すと次のような形式だ。

curl -H 'REMOTE_ADDR: <ここにIP>' http://example.com

サーバー側はクライアント側のIPをサーバー側が設定するので、このリクエストには意味がない。トラフィックと実装コードの無駄といえる。

サーバー側が何を基にして設定しているかは実装依存だと思うが、恐らく一般的にはトランスポート層より下ではないだろうか?

あとがき

いわゆるフロントエンドエンジニアや、プログラミングスクール卒などの意識が低いエンジニアらが書いたコードを見ているとこのようなものが散見される印象だが、もう少しちゃんと考えて実装して欲しいと思う。

なんというか、最低限常識とされている部分は理解しておいてほしいなというのはすごく思う。