WebpackerとWebpackManifest gemはwebpack-assets-manifest npmのentrypoints形式を前提にしている

まとめ

webpack-assets-manifest - npm

これを正しく使え。

頼むからそういう大事なことは大きく何度でも書いといてくれ。

確認したバージョン

  • webpack npm 4.28.4
  • webpack-assets-manifest npm 3.1.1
  • rails gem 5.2.3
  • webpack-manifest gem 0.2.4

で意図通りに動作することが確認できました。

manifestの形式が違う

どういうことかというと、よく見る manifest.json の

{
   "name": "path",
   "name": "path",
   ..
}

name と path を紐づけただけの形式ではなく、entrypoints の中にツリー構造で種類別に書き出してくれるものがあるのだ。

{
  "entrypoints": {
    "name": {
      "js": [
        "path",
        "path"
      ],
      "js.map": [
        ..
      ],
      "css": [
        ..
      ],
      ..
    }
  },
  "name": "path",
  "name": "path",
  ..
}

この "js" の中にはもともとのアプリケーションの entry point だけでなく、splitChunk で書き出されたファイルも含まれているので、WebpackManifest gem で言う javascript_bundles_with_chunks_tag, Webpacker で言う javascript_packs_with_chunks_tag は依存している chunk も自動的に <script> で読み込めるようになるという寸法らしい。

もうちょっと設定が必要

具体的には plugin を利用するところで

new WebpackAssetsManifest({
  entrypoints: true,
  publicPath:  true
})

としておくと entrypoints を有効にしつつ、かつ publicPath の設定を引き継ぐことができるので、splitChunk の成果を自在に利用することができる。

逆に言うと他の似たような manifest 系の npm ではなく、間違いなくリンク先の npm を利用して間違いなく上の設定を追加しておかないとダメ。

完全に過渡期の、すぐに使えなくなるノウハウのにおいがするけど、Webpack さんはメジャーバージョン 4 になってまでなんでこんな感じなんすかね…。いい加減、Web は Webpack だけで完結しないんだから他のツールとのインターフェイスをどうするかが重要という基本的なことに気づいてほしい。書き方いじったりする前に manifest の API 固めてくれ。

あと WebpackManifest gem も Webpacker じゃないんだから Webpack 側の設定に強い前提を黙って入れたらダメだと思う。せっかく脱 Webpacker しても Webpacker の隠された設定みたいなものに依存してたら謎が深まるばかり、せめて前提はしっかり明記してほしいです。

参考

PHPアプリのDB schemaをRubyのActiveRecordだけでdumpする

背景

schema.rbが欲しいのです。

我々は賢いので。

賢いかどうかはともかく、DB schema を手軽に確認する方法として schema.rb はそこそこ優れてると思うわけですよ。少なくとも何百とテーブルがあるわけじゃないならね。インデントも揃ってるし、SQL よりは読みやすく感じる。しかもこれが自動で更新され続けるんだから Rails をやる時は schema.rb は重宝します。特に普段触っていないものは。

ActiveRecordだけでschema dumpする

基本的には

ruby - ActiveRecord Schema Dump without rails - Stack Overflow

のお話。ただし注意点があって、

  • establish_connection は ConnectionPool を返す
  • そこからさらに connection を取得しないと Dumper に渡せない

具体的に言うと

AR::SD.dump(AR::Base.establish_connection.connection)

になるってことです。

上のコードはこれを避けるためなのか ActiveRecord::Base.connection を直接渡しているんだけど、手元ではうまく動かなかったので、動きを追ったらそうだった、ということでした。

Rails風にDB接続設定を持つPHPアプリのDBをActiveRecordでdump

上の方法で schema.rb は作成できるようになったけど、問題は DBMS 接続情報をどう取得するか。Rails なら database.yml になっているのでそれさえ探せばいいんだけど、この方式になっているフレームワークばかりではない。

具体的に今回のターゲットは Laravel なんだけど、Laravel の場合は大丈夫。

app/config/database.php にある

return array(
  'default'    => xxxx,
  'connection' => array(
    ...
  )
);

の部分に接続情報はまとまっている。この情報だけを取得するための以下のようなコードを用意する。

wrapper_script.php

<?php
print json_encode(require('app/config/database.php'));

これでデータベース接続情報を JSON で stdout に出力できる。こいつを Ruby 側から

JSON.parse(`php wrapper_script.php`)

とすれば Ruby のオブジェクトとして PHP アプリの接続情報を取得できる。あとは Ruby 側で好きに加工すればよい。

※ 先頭の <?php は特に忘れやすいので注意!!!

残りの課題は

  • driver -> adapter 変換
  • dsn -> 個別情報分解

の辺り。

探してみたけど、Ruby には単体の DSN parser はなさそうなので、自分で書いた方が早いかもしれない。それか

larskanis/ruby-odbc: ODBC binding for Ruby

辺りを使うと何か嬉しいことがあるかも。そこは試してませんので悪しからず。

disabled disabled

例によって(?) i-mode の話。

<select>
  <option disabled="disabled"></option>
</select>

に対応してなかった。

こっから先は単なる愚痴。

別に選べても正しく処理できて、結果が0件になるだけなんだからいいんじゃないの?と思ったけどダメなんだって。そういうもんかなぁ? 致命的なエラーになるならまずいけど、正しく処理できて0件になるくらいで我慢してもいいんじゃなかろうか? そこで i-mode のバカブラウザでもまったく同じに実現できる解にたどり着くコストを掛ける意味あるのかしらん。

同じ見た目にこだわると幸せになれないのは IE の場合とおんなじだよねぇ? そのコストがもっと大事な部分を削っちゃってるとは思わないのかなぁ。

ちょっと疲れて手が進まない

というわけでインプットの比率を上げてみる。公開することの意味 - まちゅダイアリー (2007-04-16) にも書かれているが、自分の場合はアウトプットしないとインプットしきらな(消化できな)かったり、インプット1が足りないとアウトプットも減ってくるという傾向があるので。出力が落ちてきた場合はとりあえず燃料を足せ、と言い聞かせている。

早く新しい本屋できないかなーなどと思いながら TSUTAYA をブラブラする。 を発見。おぉ。これは以前聞いていたはずなのに CD もリップしたデータも手元になくて、いったいどうやって聞いていたのかも分からないシロモノである。ということで、入手し直し。

いいねぇ、このちょっとダークに熱い感じが。アナム&マキを喜んで聞いていた時期はちょうど転換期だったっつーのもあるんだろうけど。

で、これを聞きながら読むのはお気楽に で。スバらしい。このギャップ。ついでに映像を など。いやーいいな。充実充実。つか完全版てなんだ。うわー調べたらいっぱいあるなぁ。DVD-BOX が6万とか言ってるな。。。うーん。欲しいなぁ。

  1. 情報量という意味だけでなく、刺激という意味でも 

メールを RSS みたいに読めないかなぁ

全文でも要約でもいいけど、subject と本文でペインを分けずに一連でだらだらっと表示されるもの。「操作」ができるだけ少ないものがいい。Gmail とかメルマガとか特定のサービスではなく、自分にくるメールを RSS リーダーで読む。まぁごにょごにょごにょごにょと組み合わせてやればできそうなんだけどもー。

なんか楽できんかな。(テンション降下中。)

あと認証が必要で RSS を配信してないサイトのチェックをどうにか楽にできないかしら。

あぁ。

もーしーかーしーてー。Plagger ? に合わせたデータ投げればいいのかな?

[2006-07-17 追記]

phpspot開発日誌 経由 PHP Classes - Class: POP/IMAP to RSS なんてものが登場したらしい。

そうか、あとで検索か

あとで読まずに検索 - jarp,

「あとで読む」ってそんなにいいかなぁ、Bloglines なんかでも Keep New ってあるし、それでいいんじゃないの? と思っていたけど、あとでまとめて自分用のデータから検索できるのはいいな。もともと検索目的でソーシャルブックマークが使えるだろうと思って使い始めて、クリップするものには必ず自分に役に立ちそうなコメントを書き込んでいるんだけど、そういうの細かく気にしなくても検索できるようになるのは便利だ。要らなきゃ消せばいいんだし。でもそうなると全文が入ってないとあまり意味がないなぁ。すべての記事で Feed に全文が入っていてこそ、という感じがする。

まぁ使ってみるか。

ところで livedoor Reader も使っているところを脇で見た感じはとてもサクサク使えて気持ちよさげ。そうかこれが最速の人の仕事か。すげぇな。livedoor ID を作る段階で躊躇しちゃうのが難点だけど。1

  1. ポータルサイトの ID を作りたくない病なので。未だに Yahoo! ID を持ってないのがちょっとした自慢。 

今さら URIid

以前から、Microsoft は自分たちでデフォルトの文字サイズのやたらでかいブラウザを作っておきながら、それがでかすぎるからとサイト上で文字を小さくしていやがって何考えてんだと思ってましたが、最近(て、いつまで最近なんだか)はちゃんと CSS で文字を小さくしてくれていたので、Mozilla 側でこの「妙に小さい本文」問題に自動で対応できることをやっと知りました。

本当は「 microsoft.com の CSS を無視する」ということが自分のいちばんシンプルな要求なんだけど、それは無理のようで、

Extension Room :: URIid

をインストールして、userContent.css に

body#www-microsoft-com * {
  font-size: medium !important;
}
body#www-microsoft-com *.* {
  font-size: medium !important;
}
body#www-microsoft-com *#* {
  font-size: medium !important;
}
body#support-microsoft-com * {
  font-size: medium !important;
}
body#support-microsoft-com *.* {
  font-size: medium !important;
}
body#support-microsoft-com *#* {
  font-size: medium !important;
}
body#search-microsoft-com * {
  font-size: medium !important;
}
body#search-microsoft-com *.* {
  font-size: medium !important;
}
body#search-microsoft-com *#* {
  font-size: medium !important;
}

と書いて解決。Microsoft の文字サイズ指定はみんな無視する漢な設定。*.microsoft.com に対して指定することはできないようで、そこは残念。見るサイト全部列挙しないとダメです。

これで microsoft のサイトを見るときだけ手動で設定変更しなくても見やすさを確保できる。よしよし。

この extension は body にサイト名の . を - に換えた ID を付加するものなので、body 要素に対してサイト名を指定して、その中の要素を書いていく形になります。

table#www-microsoft-com {

}

なんて書き方はできないので注意。(ちょっと悩んだ。)また、

body#www-microsoft-com *,
body#www-microsoft-com *.*,
body#www-microsoft-com *#* {
  font-size: medium !important;
}

という書き方もうまく反映されなかった。そんなもんなのかも。

unison メモ

  • クライアントとサーバのバージョンは合わせないといけない。
  • Win32 ネイティブはパスの解釈の都合上、cygwin の shell じゃうまく動かせない。

えーと、各種のサーバで Unison のバージョンが食い違ってたらチョー面倒ってことですな、これ。複数のバージョンをインストールしておけってことですか。なーんかそれはおかしいんちゃう?

Looking for changes
Warning: No archive files were found for these roots.  This can happen either
because this is the first time you have synchronized these roots,
or because you have upgraded Unison to a new version with a different
archive format.

Update detection may take a while on this run if the replicas are
large.

Unison will assume that the 'last synchronized state' of both replicas
was completely empty.  This means that any files that are different
will be reported as conflicts, and any files that exist only on one
replica will be judged as new and propagated to the other replica.
If the two replicas are identical, then no changes will be reported.
Press return to continue.[<spc>]
  • パスの中に @ があるとダメ
  • Windows でもパスの区切りは /

rsync の CVS ignore みたいな機能はないのか? おい!

-ignore "Name CVS"

(cmd.exe はシングルクォートは使えない。)で CVS ディレクトリは無視できるけど、道のりはなんか遠いぞ。

unison を ports で

古い skelton を CVS から構築して stable を入れようと思ったけど、データの消えるバグがあるらしいので結局最新版で。

ssh + scponly の方がよさげ

先日書いた rssh よりも scponly の方がよさげ。これも shell を置き換える形で発行できるコマンドを制限できるものだが、scponly だと rsync や unison といった比較的賢いコマンドを利用できる余地を残しておいてくれている。

まぁ ssh の便利さや rsync, unison の便利さを知らないユーザーだけが相手なら別に rssh でもいいと思うけど、自分が利用するとなると使えた方が嬉しいもんな。

umask 周りを考えるなら rssh

scponly にはサーバ側で umask を決め打ちにする方法がなさげです。

ロンドンのオフィスワーカーはバカばっかですか?

強者だけの Win-Win な関係

CVSWEB の謎

CVSWEB で、あるファイルのある特定のバージョンを download する。

このとき、ブラウザはたいてい新規ウィンドウを開いてファイルの内容をプレーンテキストで表示してくれる。GUI な環境なら。

こ れを w3m でやろうとして初めて何が起きているのか事態が把握できた。これ、プレーンテキストをダウンロードしているんじゃない。gzip で圧縮されたデータが送られてきている。で、ブラウザが自動的に展開してプレーンテキストとして表示している。

どうしてこれが問題になるかというと、w3m でやると、download のリンクをたどると普通にテキストが表示され、じゃー保存しようかと ESC-s とすると、なんとバイナリが保存されているのだ。

あ?(超怒)

なわけですよ。もうヤンキーなみにメンチ切りまくりだわさ。

これは S ( [Shift] + [S] ) で保存すればそりゃ当たり前だけど表示内容の保存だからテキストで保存される。

分かるか!

頭きたので Mozilla の Live HTTPHeaders で様子を見ようと思ったら

ヘッダが補足できない。

ばかやろう!

がーん < japan.linux.com

どれだけの人が使っているのか知りませんが、私は便利に使わせてもらっていた slashdot.jp の右カラムの中の「sf.jp 新着」のコーナー、なんか japan.linux.com の新着になってしまっています。おーいおいおいおい。

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm