PureScriptでViteのCSSModuleサポートを使う

この記事は PureScript - Qiita Advent Calendar 2024 の8日目の記事です。 PureScriptでViteのCSSModuleを使う方法を解説していきます。 ViteでCSSModuleを使うにはJSファイルからimport文を使ってCSSをインポートするコードを書くことによって、CSSModuleを使うことができます。具体的なコードは次の通りです。 .foo { display: flex; } import styles from './styles.module.css' export const Foo = () => { return <div className=`${styles.foo}`></div> } しかし、PureScriptから直接 css ファイルをインポートする方法が存在しないので、このような直接的なアプローチでCSSModuleを使うことはできません。 そこで、PureScriptの FFI を用いてCSSをインポートするJSコードをPureScriptから呼び出すことでこの問題を回避することができます。 // Styles.js import st from './styles.module.css' export const styles = (name) => st[name] -- Styles.Purs module Components.Foo.Styles where foreign import styles :: String -> String -- 利用側 module Components.Foo where import Components.Foo.Styles as Styles -- | Viteで解決したCSSModuleの加工されたClassNameが取得できる style :: String style = Styles "foo" これで spago build 自体は成功するのですが、viteでのモジュール解決が突破できません。viteはoutputディレクトリのspagoによってビルドされたファイルを見ますが、 spago build がやってくれるのはあくまでPureScriptのコンパイルとFFI用のJSをoutputディレクトリに配置してくれるだけで、CSSファイルは配置してくれないからです。

Posted

PureScriptでフロントエンド開発を始める

はじめに この記事は PureScript - Qiita Advent Calendar 2024 の2日目の記事です。 前日は toyboot4e さんによる 一夜漬け PureScript でした。 この記事では、TypeScriptでのフロントエンド経験者向けにPureScriptでViteを使ったフロントエンド開発環境を構築を解説していきます。 この記事の手順に従うことでホットリロードが効く開発サーバーの起動、テストの実行、エディタのサポート機能を活用した型補完やエラー表示などが可能な開発環境が実現します。 また、前提知識としてNode.jsやnpmの基本的な使い方は理解しておくことを推奨します。 基本的な開発環境の準備 まずプロジェクトディレクトリを作成し npm packageとして振舞えるようにしていきましょう。次のコマンドを実行してください。 mkdir your-project-name cd your-project-name npm init -y コマンド実行後、プロジェクトディレクトリの構造が次のようになっていたら問題ないです。 $ tree . └── package.json 1 directory, 1 file 他のパッケージマネージャーを使いたい場合は yarn init を pnpm init に読み変えてもらっても問題ないです。 また、以降のコマンドで npm が出てくる場合も各パッケージマネージャーの対応するコマンドに紐付けてもらって構いません。 PureScriptとspagoのインストール 続いてPureScriptとPureScriptのパッケージマネージャーのspagoをインストールしましょう。これらは次のコマンドで導入してください。 $ npm install -D purescript spago また、これらのツールへパスが通っているという挙動に暗黙に依存しているソフトウェアがあるので次のようなシェルスクリプトファイルを用意しましょう # path-add.bash export PATH=$PATH:node_modules/.bin そしてプロジェクトの開発をはじめる前に毎回 source path-add.bash を実行します direnvを使っている場合 direnvを使っている場合は.envrcに次の項目を記載しておくと毎回path-add.bashを実行する必要がなくなります。 # .

Posted

mdmg v0.1.6をリリースした

ふとGitHubを見ていると、akamecoさんが touchx という新作を作っていた。 このプログラムはXDG Based Directoryに基づいてテンプレートを書いたり、touch --save でテンプレート化したりとおもしろい機能が付いている。 mdmgでもrepositoryの外からテンプレートを展開したいよねーという課題を以前から抱えていて、収まりが付く方法を思い付かずに放置していたのだが、XDG Based Directoryを使うという方針は筋が良さそうなので、さっそく実装してみた https://github.com/himanoa/mdmg/pull/13 touchxが使っていたXDG_DATA_HOMEを使うようにしてしまったが、普通にXDG_CONFIG_HOMEのほうがよかったかもなーという後悔もあり、今後配置場所が変わるかもしれない。 実装してみた感想は、2年前の僕がFsRepositoryを作っていたおかげでここをちょちょいと拡張すればとりあえず動くようになっていて簡単でよかった。CIが腐ってて作り直したいなーとおもったりした。など

Posted

ripgrep設定 最強

ripgrep、デフォルトだと隠しファイルとかを検索対象にしなかったりしてちょっと不便 パラメーターを自分で都度設定してもいいが、エディタプラグインから使用するときにコマンド設定したりする必要があり煩雑。 実はripgrepには設定ファイルを読み込む設定があるのでそれを使うといい $HOME/.ripgreprcとかに下記のやつをおいておくと最強になれるょ --- --hidden --glob !.git/ ---

Posted

2023年再考

2023年について考えてみるといろいろおもうことがあったのでメモがてら残しておく。なんというか人に読ませる文章ではないのでとっちらかっているかもしれない 労働 今年やっていたこと、できなかったこと アーキテクト 巨大モノリスSPAの分割。 長年の開発月日によって巨大なモノリスになってしまったアプリケーション、業務システムということもありバンドルサイズに無関心に開発をしていたらバンドルサイズはどんどん肥大化し、webpackのスピンアップコストも肥大化し、CIのビルドタスクで必要なメモリもおおくなってしまいとんでもない状況になってしまった。 こういった問題をどうやって解決するかを考える仕事をした 古いコードから新しいコードに変える必要も多々あり、migration用のESLintルールを多数開発したり、密結合のアプリケーションから個別パッケージにソースコード単位で安全にcloneするツールを作ってmigration作業をしていた つくったやつ コミュニケーション 明確にできなかった。人に仕事を任すのが単純に下手だった。 具体的に発生した問題はつぎの通り 他人の出力が自分の期待した物ではない 闇に葬りさられる その結果一人で仕事する時間が圧倒的に増え、やっている仕事のインパクトというのが薄れてしまった。インパクトが薄れることによって並列で別の改修が走ったり困る実装が知らない意思決定プロセスから生えて常に頭を悩まされる状態に置かれることになった どうすればよかったか、というのは今だによくわからない。上司ともこの話はよくしている気がするがどの提案も納得できなかった。 人を巻き込むためにコミュニケーションをもっと取ったほうがいい、という話はごもっともだが提案してもレスポンスがこないからどうやってコミュニケーションを深めるんだ、という観点で疑問が残っている そもそも、一人で全部草案作ったのがよくなかったんじゃないかなみたいな観点もある 全体周知という形で共有したりタスク任せたりしたのがよくなかったかもしれない、もっと個別にやるのが正しいアプローチだったのかも。これは検証の余地あるなとおもっていて、最近そういう仕事のやり方を意識している。具体的には、とりあえず全体周知が必要なものに関してはマネージャーに全部相談して適切な人間を割り当ててもらって、そこを全部通す形にするみたいな。まあ意図的ではない部分が過多でマネージャーにだっこされているはある 生活 一番おおきなライフスタイルの変化はTwitterをやめたことだ。 代替としてmastodonに移行はしたが、見る頻度は以前Twitterみていた頻度とは比べものにならないほどmastodonもみてないし投稿もしていない。 Twitterをやめた理由は色々あるが、TLみて不快に感じることが増えた。プライベートな時間でストレスを作るのは人生を無駄にしている感じがあったというのが一番おおきな理由である。 やめて浮いた時間で何かはじめたか、というとそういうわけでもない。部屋でダーツしたり考え事をしたり、Discordで人と話してたり見ている時間が増えただけだ。 これによって気づいたことや良かったこと、悪かったことがいろいろあるので、ここではそれらについて語っていこうとおもう 良くなかったこと あまり明瞭ではない。 元々世間知らず、トレンドに疎い状態だったが自分が興味あることですら疎くなった 交友関係が減った あらゆる物事への興味関心が薄れた。 Twitterをやっている人間に対しての選民思想 これらによって、世界と自分が切り離されたような感覚を感じることはTwitterをやめる以前より増えた気がする。 また、今まではよくもわるくも世界的なトレンドはこうだから、みたいな論調で考えていた部分がまったくなくなった。自分が正しいとおもったからこうしています。なぜ正しいと思うかは〜という考え方にシフトしていっている気がする。 他人とコラボレーションして物事を進めるという考え方が自分の中からどんどん欠落していっている気がする。これの何がよくないかが明確にわからないのもよくない気がする。 言語化できない危機感を常に感じている 良かったこと (程度はあるが)今でも交友している人間とはより深い仲になった気はする 不幸な事故ニュースによって悲しい気持ちになることがなくなった 思考停止できていた部分が少なくなった 本を読むということができるようになった メンタル面はかなり安定するようになった気がする、とはいえリアルでヘコむようなことがあれば相応にヘコむので本質的は何も変わっていないのだが… 前より考える時間が増えたのは人生が豊かになった感じがしてよいなとおもった。 個人的には本を読むようになったのが結構良かった。 本という媒体はすごくて、なんとオーバーレイ広告がでないし情報が正確でまとまっていることがあり、知識として役に立ちやすくて神 Twitterをやめることで気づいたこと インターネット検索という機能はもう完全に汚れ切っており、あれを使って常日頃欲しい情報にアクセスするのは困難だということ。 Twitterにしかない情報というのは案外多い 知識をストックで保持してインターネットに公開することへの価値が、低下していったのだろう 文書という媒体が衰退して動画になっただけのような気もするが… Youtube shortなどもでてきており、動画もフロー情報化しているように思えるから、ストック情報として保持することに人々が関心を持たなくなったのだろう。 俺も最近よりブログを書かなくなった気がする 最後に なんか統合失調症になりそうな気がしてこわいなぁと感じています。 他にも 自分の人格に自信がなくなってきたこと 人格を矯正しないとこの先社会でやっていけなさそうな感覚があること 自分が好きだったpublic communicationがメインな社会というのは幻想だったのかもしれないと思っていること などいろいろ書きたいことはあるのですが、まとまりがなさそうなのでまたの機会に書くか、お蔵入りにしようとおもいます。 去年もつらい1年でしたが今年も好転する兆しがまったく見えないですね。人生はいつも厳しい

Posted