2025年7月16日水曜日

node.jsをWindows11で使ってみるまでの手順

背景

今更なのかも知れないが。

自分は長らくWebアプリケーションは仕事で作っているがnode.jsを使う必然性はなかったので手を出さなかった。というか、そもそも私は別に新しい技術大好き!知識とスキルの獲得にいつも興味しんしん!日々自分を成長させていきたいと思っています!というタイプでは全然ないので、別に流行ろうが定番だろうが知らなくて済むものを知りたくはない派だ。


ともあれ、今回は、サーバーサイドでPDFを生成する手軽な方法が欲しかった。自分はいつもLinux + Javaの環境だが、JavaのPDF生成系ライブラリで昔に使ったことがあるものはなんだかすごく面倒な上にCSSも効かないみたいな使えないものだったので、そうではないものが欲しく、いろいろ検証するためにはまず手元のWindowsで動かしてみたいなという流れ。


つまるところ、puppeteerというものを使って、ヘッドレスのchromeでPDFを生成したい。

以下手順

まず、puppeteerのサイト

https://pptr.dev/

に当たり前に

npm i puppeteer


こうすればインストールできると書いてあったのでコマンドプロンプトに入れてみたが、もちろん何も起きないので、npmというのがまず必要。そしてnpmを入れるにはnvmというのが必要らしいということで、

 

node.jsのためのnpmのためのnvmのインストール


https://github.com/coreybutler/nvm-windows/releases

setup.exe的なものをダウンロードし、実行。よくわからないが選択肢は全部ポジティブ回答する。

そしてコマンドプロンプト

nvm -v


バージョン出たのでOK。

ということで

nvm list available

バージョンが出てくるので、とりあえず一番新しいっぽいのを指定し

nvm install 24.4.0

すると、

Installation complete.

If you want to use this version, type:

nvm use 24.4.0

こんなメッセージが出てきたので、その後に

nvm use 24.4.0

と入力。

これでどうやらnvmが使えるようになった。


npmのインストール

私が使いたいのはnvmでもnpmでもなくnode.jsとやらなんだが、node.jsというのはつまり実行環境的なものであり、そこでライブラリ(と呼ばないらしいが)を管理するのがnpmで、そのnpm自体のバージョン管理をするのがnvmということらしい。クールなアーキテクチャなのだろうが面倒くさいことこの上ない。


さっきnvmが使えるようになったわけなので、コマンドプロンプトで

npm -v


これも反応する。入れるべきものは入ったということらしい。


なので、プロジェクト?を作る。

Gitやらmavenやらgradleやらのそれと似たようなものだろうか。つまりはフォルダ単位で管理みたいなことらしい。

以下フォルダ作成(エクスプローラーで)

c:/d/mynpm

コマンドプロンプトでそこに移動

cd c:/d/mynpm

そして

npm init -y

-yは「すべてデフォルトでOK」のオプション。


変なJSONなどがフォルダ内に出来ている。


そしてpuppeteerを使いたい。


https://pptr.dev/guides/installation


とりあえず書いてあったコマンド実行。


npm i puppeteer


しばし待って


added 97 packages, and audited 98 packages in 24s

7 packages are looking for funding

  run `npm fund` for details

found 0 vulnerabilities


・・・寄付を募ってますよということ?まあその話はまた今度ということでいまはスルーだ。


サンプルを元に作成したコード。(もちろんURLは、実際は違うもので試した)


import puppeteer from 'puppeteer';


(async () => {

  // Launch the browser and open a new blank page

  const browser = await puppeteer.launch();

  const page = await browser.newPage();

  await page.goto('https://www.example.com/');

  await page.setViewport({width: 1080, height: 1024});

await page.pdf({path:"c:/d/pptr-pdf.pdf"});

  await browser.close();

})();


これをpptr-pdf.mjsと名付けて実行。


 node pptr-pdf.mjs


※ 置いたディレクトリにて


結果、指定したパスにPDFは生成された。クオリティは、同じページをChromeで開いて印刷しようとした時と同等(当たり前だが)。これは良い・・・。


補足 途中で引っかかったところ

  • 順調に進めていたがモジュールがないとエラー。
    • 試行錯誤の結果、作ったスクリプトのファイルをプロジェクトの中、つまり今回で言えばmympmに移動しないとダメだった
    • パスの問題なのだろうがよくわからない
      • 環境変数にNODE_PATHというのをnode_modulesフォルダで指定すればという話はあるが、やってもダメだった
      • 逆に、スクリプトをプロジェクトの中に置いてしまえば、NODE_PATHはなくても大丈夫だった
      • Linuxの時はもうちょいマジメに調べるつもりだが、Windowsで試すのにそんないろいろ求めてないのでこれはまあ良い
    • 拡張子が.jsではダメで、.mjsにしないとダメだった
      • 最初は.jsでやったのだが、nodeコマンドで実行したらなんかそんなエラーメッセージが出たので、ファイル名を変えたらできた。
      • それ以外のおそらくもっとクールな解決方法も提示されていた気がするが、面倒そうなのでトライする気にはなれなかった
      • でも別に拡張しはmjsでいい気がする。普通にWebページで使ってる奴と見分け付きやすいし。


2022年10月22日土曜日

AWS EC2のPSQL(PostgreSQLのクライアント)をアップデートする方法

 EC2の中で、もとにした何かがどうなのかよくわからないが、psqlのバージョンが古くてRDSにちゃんとつながらないことがある。

ちゃんとつながらないというか、SQLは打てるのだが

\d tablename-foo

のように してテーブルの情報を見ようとした場合などにサーバーとのバージョン違いでエラーの旨のメッセージが出て微妙に不便という状態。


で、PostgreSQLのクライアントをアップデートしたいのだが、Linuxに慣れてはいないので検索するとrpmのリポジトリがどうとかという面倒な手順が出てきて、ちょっとやってみたけどエラーで引っかかったりして困ったのだが・・・


結局は、以下の公式に書いてある手順で簡単にアップデートできた。

https://aws.amazon.com/jp/amazon-linux-2/faqs/#Amazon_Linux_Extras


具体的には以下の通り。簡単。


現在のバージョンと入っているものを確認

$ sudo yum list installed | grep postgres

postgresql.x86_64                   9.2.24-8.amzn2                   @amzn2-core

postgresql-libs.x86_64              9.2.24-8.amzn2                   @amzn2-core


アンインストール

$ sudo yum remove postgresql


※ アンインストールは上記ページに辿り着く前に実行してしまったので、必要だったのかはよくわからない。ただ、しておいて損もないだろう。


$ sudo amazon-linux-extras | grep postgresql

  6  postgresql10             available    [ =10  =stable ]

 41  postgresql11             available    [ =11  =stable ]

 58  postgresql12             available    [ =stable ]

 59  postgresql13             available    [ =stable ]

 63  postgresql14             available    [ =stable ]



あったので、実際インストールをする。


$ sudo amazon-linux-extras install postgresql13


すぐに終わり、再度psqlを利用したら\dのコマンドでテーブル情報も確認できるようになった。めでたしめでたし。

 


2021年9月27日月曜日

Apache mod_rewriteの設定

基本は、

RewriteRule PTN REPLACE [OPTION]

を書く。


PTNは正規表現で、わたってくるのは /foo/bar.htmlなど、/から始まるパス(.htaccessではなくhttpd.confに書く場合)。


PTNが一致した場合のみ、パスがREPLACEに変わる。REPLACEを絶対URLにして、OPTIONにRまたはPでRedirectあるいはProxyが出来る。

リダイレクトは、[R,L]。Lを明示する必要がある。

プロキシは、[P]。PはLを暗黙的に含んでいる。


RewriteRuleではパスしか検査できない。なので、それ以外も調べたい場合などは

RewriteCond 検査対象文字列 条件

を直前に列挙する。複数列挙すればAND条件。ORにしたい場合には特殊な書き方がある。

検査対象文字列は、いろいろな暗黙変数的なもの。検索すればすぐに出てくるだろう。

条件は正規表現またはフラグ。これも検索すればわかる。


正規表現は普通のPerl互換。

なので、「すべてをマッチ」したいためだけに ^(.*)$なんて書く必要はない。なぜか流行っている?けども。




Apacheの自動再起動

 AWS EC2 AmazonLiunuxのインスタンスにて。

Apacheは最初から入っているが自動起動は有効化されていない。

rootユーザーにて以下実行で自動起動が有効になる。

# chkconfig httpd on


設定の状態確認は

# chkconfig --list httpd


こんな表示がされるが、

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

0(停止)から6までのいろいろな起動モード毎に自動起動するか否か。いい感じにしてくれてるはずなので、真ん中あたりがいくつかonならOKのはず。

2020年2月6日木曜日

Amazon Linux2でphp.iniの変更が反映されない

php.iniは/etc/php.ini

info.phpにも書いてあるのでわかる。

変更してApache再起動してもまったく変化なし。5回くらい再起動してもダメ。
で、

(特権ユーザで)
systemctl restart php-fpm

これをやったら変更が反映された。Apacheはどうでもいいらしい。


Server APIFPM/FastCGI
 こうなっているからだそうで。よくわからないし、そんなに詳しく知りたくもない・・・。

systemctl status php-fpm

こうすると、ステータスも見られる。PHP-FPMとかではダメ。そのあたりはOSによって違うらしい。めんどくさ・・・。

2018年6月26日火曜日

WindowsでTomcat8.5を使って開発するときのオレオレ証明書用のキー生成

Javaのbinフォルダにkeytoolというコマンドラインアプリケーションものがあるので、これを使う。

まず当然、コマンドプロンプトでこれを実行する。

そんで、
keytool -genkeypair -keystore c:/tomcatkeystore.jks -keyalg RSA -alias localhost -validity 3650
パスワードはどうでもいいので"password"と答え、あとの設問はreturnのみで答える。最後の確認だけyを答えないとキャンセルになってしまうが。

Tomcatのserver.xmlの以下を書き換え。(コメントアウトされてるのを解除し、SSLHostConfigの属性値を追加)
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="c:/tomcatkeystore.jks"
                         type="RSA"
                         certificateKeystorePassword="password"
                         certificateKeyAlias="localhost"
                         />
        </SSLHostConfig>
    </Connector>

これで、「安全でないホスト」としての接続はできた。

2018年4月10日火曜日

Tomcat 8.5のファイルアップロードサイズ上限変更

デフォルトが2MBになっている。それで、それ以上のファイルをアップロードするとFileUploadBase$SizeLimitExceededExceptionというのが出る。

maxSwallowSizeというのを設定すればよいということだが、それをやっても以前としてエラーが出る。いろいろ悩んだが、最後にmaxPostSizeも設定したら上手く行った。

<Connector ... maxSwallowSize="5000000" maxPostSize="5000000" ....>

みたいな。

この2つを同時に設定すると上手くいかないという情報もあったのだが、maxSwallowSizeというプロパティ自体が新しかった頃の情報かと思うので、その後にTomcatの仕様が変わったのかも知れない。ともかく、両方設定したらうまくいった。