bouzuya.hatenablog.com

ぼうずやのにっき

CSS Modules を PureScript のプロジェクトでためした

CSS Modules を PureScript のプロジェクトでためした。そして現状失敗している。

postcss 経由で CSS Modules を試そうとしたのだけど Parcel が邪魔してうまくいかなかった。

PureScript のモジュールを生成するところはうまくいく。

const fs = require('fs');
const path = require('path');

const saveStyleModule = ({ srcDir, moduleNameSuffix }) => {
  return (cssFileName, json) => {
    const cssDir = path.dirname(cssFileName);
    const cssName = path.basename(cssFileName, '.css');
    const baseModuleNames = path.relative(srcDir, cssDir).split(path.sep);
    if (baseModuleNames.length > 0 && baseModuleNames[0] === '..')
      return;
    const moduleName = cssName + moduleNameSuffix;
    const pursFilePath = path.resolve(cssDir, moduleName + '.purs');
    const entries = Object
      .keys(json)
      .sort()
      .map((key) => ({ key, value: json[key] }));
    const purs = [
      'module ' + baseModuleNames.concat([moduleName]).join('.')
    ].concat(
      '  ( ' + entries.map((i) => i.key).join('\n  , ') + '\n  ) where'
    ).concat(
      entries.map(({ key, value }) => {
        return [
          '',
          key + ' :: String',
          key + ' = "' + value + '"'
        ].join('\n');
      })
    ).join('\n');
    fs.writeFileSync(pursFilePath, purs, { encoding: 'utf-8' });
  };
};

const mySaveStyleModule = saveStyleModule({
  srcDir: path.resolve('./src'),
  moduleNameSuffix: 'Style'
});

module.exports = {
  plugins: [
    require('postcss-modules')({
      getJSON: (cssFileName, json, _outputFileName) => {
        return mySaveStyleModule(cssFileName, json);
      }
    })
  ]
};

問題は Parcel が↑の postcss.config.js を解釈して余計な動きをしてしまうこと。Parcel で変換を無効化する方法を調べてみたのだけど出てこない。いくつかの方法をためしたのだけど今日は時間切れ。

まだ試していない方法もある。別のディレクトリに postcss.config.js を置いて Parcel から隠しつつ postcss-cli--config で指定する方法。 postcss.config.js を使わずに postcss を使うスクリプトを書く方法。 Parcel をやめる方法。

明日やろう……。

大乱闘スマッシュブラザーズ SPECIAL 灯火の星をクリアした

大乱闘スマッシュブラザーズ SPECIAL 。灯火の星をクリアした。 76 時間。難易度ふつう。達成率 100.00% 。めちゃくちゃ時間がかかった。クリアゲッターとしては残りは「すべてのアドベンチャースキルを手に入れる」で完了。

ザ・ボスとポリーンが適切なサポートなしでは厳しそう。あとは鈍足スーパーアーマーとビームソードの組み合わせで突破した箇所がわりとある。


Google Tasks API を呼び出すスクリプト (2019-01-17) をバージョンアップした。関連記事は↓。

今回の変更は JavaScript -> TypeScript と tasks sync の追加。 TypeScript 化は JavaScript リポジトリ削減の関連。 tasks sync は差分の検出と適用をする。

以前は↓だった。追加するものだけをクリップボードにコピーしないといけなくて面倒だった。

$ tasks list | pbcopy # 一覧を取得
$ # エディタで作業
$ tasks prune # 期限切れを完了
$ pbpaste | tasks send # 一括で追加

今後は↓。 1 ステップしか減っていないように見えるけどエディタで作業の内容が変わっている。何も考えずにすべてコピーして実行すれば差分を反映してくれる。

$ tasks list | pbcopy # 一覧を取得
$ # エディタで作業
$ pbpaste | tasks sync # 差分の検出と適用

本当はほかのことをしたかったのだけど毎日のように使っているコマンドなので時間をある程度は使ってももとがとれそうだ。

『アントマン&ワスプ』を観た / 『ビジョナリー・カンパニー』を読んだ

CoffeeScript & JavaScript リポジトリ削減は 292/320 。

CoffeeScript 。 Hubot 関連はすべて archived 。一気に進んだ。ここからが長そう。

JavaScript 。 cars 関連の TypeScript 書き換えを進めている。中身はどれも簡単なものなので作業。


昨日だけど『アントマン&ワスプ』を観た。

1 作目のほうがごちゃついてなくて好きだ。

ラボの扱いが雑。

ラストがインフィニティ・ウォーのラストに繋がっている。エンドゲームではどうなるんだろうな。


これも昨日だけど『ビジョナリー・カンパニー』を読んだ。あまり参考にはならなさそうだけど。

「基本理念の維持」と「進歩を促す」。陰陽の太極図で描かれたこれが何度も出てくる。 OR ではなく AND 。どちらかではなく両方を重視する。そういう方法を求める姿勢が必要なのだとか。保守と革新を極端な形でバランスさせているのだろう。

ぼくは業務に関してルール化するのが好きだけどルールを壊すためのルールが含まれてほしい。たとえば改定や例外を許容するためのものだ。Magic: The Gathering の「カードはルールに勝つ」 などが近いだろう。

bouzuya/purescript-react-basic-password-generator 1.0.0 をつくった

2019-01-20 に bouzuya/purescript-react-basic-password-generator 1.0.0 をつくった。 mockmock.dev #198 における w010 の成果物。これまでのルール・活動は bouzuya/w010 を参照。

password-generator はパスワードを生成するアプリケーション。

プログラミング言語は PureScript 。パッケージマネージャーに spago と npm 。 npm initializer に bouzuya/create-purescript-react-basic 。 purescript-react-basic 経由で react や react-dom を使っている。

今回の w010 の 1.0.0 が遅れたのは先週の記事を見ればわかるとおり CSS 関連のことを調べていたからだ。その結果を反映しようとしたが最終的には諦めた。 style 要素および style 属性による素朴なスタイリングを試すにとどめている。

次回は CSS Modules を postcss 経由で適用してみたい。その他の手法や SSR / CI 設定 / スクリーンショットはそれ以降で検討する。既に #199 や #200 の 0.1.0 が終わっている。はやく進めないと。


bouzuya/cars 2.0.0 をつくった。

それだけ。 cars-counter-... や cars-reporter-... も直していく。

bouzuya/node-wsse 3.0.0 をつくった

bouzuya/node-wsse 3.0.0 をつくった。

主な変更は CoffeeScript から TypeScript に置き換えたこと。あとは module.exports = function /* ... */ を削除したくらいか。 require('wsse').default で良いだろう。どうせ babel か TypeScript あたりで import wsse from 'wsse'; して使っているだろうし……。

2019-01-21bouzuya/table-b から設定をコピーしてきたのでその点では楽だった。

↑のツイートしてから数日後にまさにそういう事例が起きてしまった。型を明示してみたら間違いに気づいた。 s という変数だったので string をつけたら実は Buffer | string だった。 s の利用箇所は new Buffer(s) だったので実害はないのだけど気持ちが悪い。そも new Buffer(s) も deprecated だ。

Node.js の API はしばしば↑のような返し方をする。今回は hash.digest([encoding])encoding の有無で戻り値の型が Bufferstring で変わる。 JavaScript だなあ。


CoffeeScript & JavaScriptリポジトリを整理している。↑の wsse に依存するものがいくつかあった。 TypeScript に置き換えようとしてから気づいた。置き換えにも依存関係というか順序があった。

カニを食べた

CoffeeScript & JavaScript リポジトリ削減 164/320 。半分を過ぎた。今日は bouzuya/table-b を TypeScript に移した。何かのタイミングで使いそうなので残しておく。


用事で外出。なんだか眠くてずっとあくびをしていた。昼寝の習慣がついたからかな。昼食後に寝ないと眠い。


カニを鍋に入れて食べた。ほじっているとキリがない。殻を強引にむこうとしたら箸が折れてしまった。最後に雑炊をつくろうとしたら卵がなかった。

2019-W03 ふりかえり

2019-W03 をふりかえる。

2019-W03 の目標 とその記事

目標。

  • ☑ bouzuya/purescript-react-basic-leaflet-geojson の 1.0.0 のことを書く
  • ☑ bouzuya/purescript-react-basic-password-generator の 1.0.0 をつくる
  • ☐ bouzuya/purescript-react-basic-repository-list の 1.0.0 をつくる
  • ☐ bouzuya/yzrh の 0.1.0 をつくる
  • ☐ w010 v3 およびアプリの方針を考える
  • ☑ 髪を切る

記事。

目標。半分。 bouzuya/purescript-react-basic-password-generator の前にと CSS in JS 関連のことを調査していたらきりがなくなってしまった。結局 password-generator は最低限のことをやって完了にした。

つくったもの

2019-01-14/2019-01-20

bbn-tt は JavaScript -> TypeScript の一部 (2019-01-16) 。 purescript-examples は poker を追加した (2019-01-14) 。 password-generator は今日 1.0.0 にした。また書く。

今日は mockmock.dev #200 w010 で purescript-react-basic-timer 0.1.0 をつくった (Slack のスレッド) 。 oreshinya/purescript-pure-style を軽く試した。

よんだもの

  • 『「1日30分」を続けなさい!』 (2019-01-14)
  • 『 OpenSSL クックブック』 (2019-01-16)

ビジョナリー・カンパニー』を読んでいる。その次は 2018-12-05 の『みんなのデータ構造』かな……。他の積読に進むかもしれない。

みたもの

今日は『ゼロ・ダーク・サーティ』を観た。オサマ・ビンラディンってひさしぶりに聞いたな。

週 2 本におさまっている。

その他

ゲーム。 2018-11-24 からの BLUE REVOLVER 。停滞中。 2019-01-03 からの大乱闘スマッシュブラザーズ SPECIAL 。灯火の星を遊んでいる。もう 65 時間くらいやっている。まだクリアしていない。

体調。毎日のストレッチを継続できている。

育児。寝返りはしそうにない。人見知りをしているかもしれない。

今週はだいたい CSS 関連のことを調べていた気がする。

CSS Modules についてはだいたい分かった。 PureScript のことを考えると import / require / webpack / babel への依存は避けたい。つまり css-loader や babel-plugin-react-css-modules では使わない。使うとすれば postcss 経由で PureScript のモジュールを生成する感じかな……。

まだその後の世代のことは調べきれていない。ただ CSS in JS 初期の style 属性を利用した実装はさすがに筋が悪いと思うので使用しない。

PureScript に限って言うとどこまで型をつけるのかという問題がある。 slamdata/purescript-css がわりと使いにくくて。足りないプロパティがあってどうしようもなくなる。 paulyoung/purescript-styleoreshinya/purescript-pure-style を見ている。

細かい話はともかく CSS 関連のことを調べていた。

もう 2019-01 も終わりに近づいてきた。

2019-W04 の目標

  • bouzuya/purescript-react-basic-password-generator の 1.0.0 のことを書く
  • bouzuya/purescript-react-basic-repository-list の 1.0.0 をつくる
  • bouzuya/purescript-react-basic-timer の 1.0.0 をつくる
  • bouzuya/yzrh の 0.1.0 をつくる
  • w010 v3 およびアプリの方針を考える