11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UUUMAdvent Calendar 2019

Day 1

WebGLのTypeScript環境作ってみた

Last updated at Posted at 2019-12-02

はじめに

この記事は、UUUM Advent Calendar 2019 1日目です。

UUUMではRails、AWS、UI周り、最近はアプリ周りなど幅広くやっています!

今日月曜日が12/1だと思いこんでたら昨日でした。初日からやらかしていますが僕は元気です。

最近WebGLの勉強を始めたよ!

「Graphics出来る人カッコイイ」「WebGL勉強してみたい」とずって思っていたので、10月の終わりから wgld.org でWebGLの勉強をちょこちょこ始めました。

Screenshot from 2019-10-26 22-02-49.png

45章くらいまで進めたけど、サンプルコードがレガシーできちんとリファクタリングしたいなっていう気持ちでいっぱいになったので、折角なので改善を回しやすいようにフロントエンド環境を整えてみました!

構成

repo: takeokunn/glsl-sandbox
url: https://takeokunn.github.io/glsl-sandbox/

~/.g/g/t/glsl-sandbox (*´ω`*) < tree -I node_modules
.
├── package.json
├── package-lock.json
├── public
│   ├── bundle.js
│   └── index.html
├── src
│   ├── index.ts
│   ├── lib
│   │   └── minMatrix.ts
│   ├── shader.frag
│   ├── shader.vert
│   └── @types
│       └── common.d.ts
├── tsconfig.json
└── webpack.config.js
└── node_modules

CircleCI

Screenshot from 2019-12-02 18-48-56.png

deploy では、 webpack build した後の public/ ディレクトリを gh-pagespush されるようにしました。
ライブラリは gh-pages を使っています。

Webpack設定

'glslify-loader' を使って glsl を扱えるようにしました。

webpack.config.js:

const path = require("path");

module.exports = {
    mode: "development",
    devtool: 'inline-source-map',
    entry: path.join(__dirname, "src/index.ts"),
    output: {
        filename: "bundle.js",
        path: path.join(__dirname, "public")
    },
    module: {
        rules: [
            {
                test: /\.ts?$/,
                use: "ts-loader",
                exclude: /node_modules/
            },
            {
                test: /\.(glsl|vs|fs|vert|frag)$/,
                exclude: /node_modules/,
                use: [
                    'raw-loader',
                    'glslify-loader'
                ]
            }
        ]
    },
    devServer: {
        contentBase: path.join(__dirname, "public"),
        open: true,
        inline: true
    }
};

tsconfig.json:

{
  "compilerOptions": {
    "sourceMap": true,
    "noImplicitAny": false,
    "module": "commonjs",
    "target": "esnext",
    "moduleResolution": "node",
    "allowJs": true,
    "typeRoots" : ["src/@types"],
    "lib": ["es2019", "dom"]
  }
}

Lint周り

eslintprettier でモダンにLint周りを調整しました。

.eslintrc.js:

module.exports = {
    extends: [
        "eslint:recommended",
        "plugin:@typescript-eslint/recommended",
        "plugin:prettier/recommended",
        "prettier/@typescript-eslint"
    ],
    plugins: ["@typescript-eslint"],
    parser: "@typescript-eslint/parser",
    env: { browser: true, node: true, es6: true },
    parserOptions: {
        sourceType: "module",
        project: "./tsconfig.json"
    },
    rules: {
        "@typescript-eslint/no-var-requires": 0
    }
};

GLSLを開発する上でのEmacsの設定

この辺のライブラリを使うと Emacs での開発がスムーズに進みます。

glsl には、本格的に開発できるくらいの language server がないので一旦はパス。(いつか作る)

glsl-mode の設定:

(autoload 'glsl-mode "glsl-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.vsh$" . glsl-mode))
(add-to-list 'auto-mode-alist '("\\.fsh$" . glsl-mode))

company-glsl の設定:

(use-package company-glsl)
(global-company-mode)
(add-to-list 'company-backends 'company-glsl)

最後に

UUUMでは特に業務では使わないけどGLSLに詳しいエンジニアを欲しています。
詳しくはこちら →→→→→→ UUUM攻殻機動隊の紹介

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?