【問題解決】col要素のspan属性を小さい値に変更すると、IE11では強制終了が発生する

トゥレーヌは、ひとつの社会には固有の根源的社会問題があり、解決する社会運動もひとつになるとした。 一方、メルリッチは、現代社会は様々な要素で構成される「複合社会」であり、環境問題や差別といった社会問題が多様化された現代では、それを解決しようとする社会運動も多様化する、と論じた。
ヒヒぶち込めば解決するけどカトルは解放しやすい部類だしエタラブあるから風砕くのに迷い無いしでやらん要素そんな無いんだよなぁ 今回古戦場走る時間取れるか微妙でカトル居なくても別に困りはしないからヒヒかける価値あるかってのが問題
その先生が女性に嫌われる要素を持っている事は、男の俺から見てもなんとなくわかる。 ただ、セクハラか? どの部分が? って感じだったwww (少なくとも俺の目の届く場所では) で、先生辞めて、女の子も辞める。 …俺から見たら、元々問題がないのに一体何が解決したのか?って感じ。
それぞれがチャールズの問題解決に導くかたちで、帰り道に連れて行くのではなく自分で切り開かせたのが印象的でした。原作を読んだのはもう十数年前ですが、オリジナルの要素もあってとても新鮮で魅力的で世界に引き込まれました。ショーを観るのを楽しみにしてます。#シャイマス_LostAlice
幼稚園児の絵、よだれをたらしてる子が二人(笑) 「深く考えてない」って事を表す為なのだろうか。 うまくいかなくてギャーってなってうるさいしかなわん事多いけど 暫くすると、あれだけ騒いでた問題を遊び感覚で試行錯誤の末に解決&プラスα要素付けてきたりするな。見習わないといけない。
問題が日に日に肩にのしかかってきて呼吸が怪しいです。解決には当分かかりそうなので、しばらく不安要素になりうるケータイとおさらばです。あしからず。
与えられた情報、条件のなかで合理的、論理的な手段を用いて問題を解決する その礎を築くのが中学までの算数、数学教育だと思ってる。高校数学は、この要素を持ちながら、多少複雑な条件のモデル化の学習と学問としての数学の橋渡し。
やっとこさリスト振り分けを実行中・・・。 カービィとスプラ関連とかなんか要素が被る人どうしようとか思ってたけど、両方のリストに収めれば問題ないと自己解決。 あ、因みにリストは今んとこ全部非公開です。 変な分け方はしてないから安心してね!・・・多分。
当事者研究の構成要素として、フランクルの実存分析、デューイの問題解決技法、フッサールの現象学というのが出てきた。どれも対象を尊重する態度や表現力が豊かで面白そう。
【マトリックス図】  行に属する要素と列に属する要素によって二元的配置にした図です。多元的思考によって問題点を明確にしていくために使用します。特に二元的配置の中から,問題の所在又は形態を探索したり,二元的関係の中から問題解決への着想を得たりします。 #QC検定キーワード
原則54 問題を目標、道具、操作、制約という4つの要素から分析せよ 問題:現在の状態と目標の間にズレがある事態(定義明確⇔不明確) 目標:問題が解決された状態とは? 道具:どんな道具や手段を使い目標達成? 操作:どんな手順や方法で目標達成? 制約:禁止事項や守る必要のある規則は?
幼少時の様子に問題がなかったわけではないけれど。今では集中力の不安定さ、対人関係や状況把握の困難などを中心に、解決しにくい小さな困りごとの数々が複雑にからまり合っているという感じ。後天的な要素の方が大きいのではという疑いは前より強い。

目標

この記事のゴールは、Webpackで以下のことができる設定を紹介することです。

  • SPAではなく複数のHTMLをPugを利用して生成する
  • 複数のJSをそれぞれBabelでトランスパイルする(1つにはまとめない)
  • 複数のSassもそれぞれコンパイルする(1つにはまとめない)
  • CSSにAutoprefixerなどのpostcssをかける
  • CSSを部分的にインラインにもしたい
  • トランスパイルしないファイル(.pngみたいなもの)も扱いたい

先に結果から

とりあえず webpack.config.jsを貼っておきます。

webpack.config.js
// yarn add apply-loader autoprefixer babel-core babel-loader babel-preset-env copy-webpack-plugin css-loader extract-text-webpack-plugin globule node-sass postcss postcss-loader pug pug-loader sass-loader style-loader webpack webpack-dev-server

// develop : webpack-dev-server --open
// build   : NODE_ENV=production webpack

const webpack = require('webpack')
const path = require('path')
const globule = require('globule')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')

// ディレクトリの設定
const opts = {
  srcDir: path.join(__dirname, 'src'),
  destDir: path.join(__dirname, 'public')
}

// keyの拡張子のファイルが、valueの拡張子のファイルに変換される
const convertExtensions = {
  pug: 'html',
  sass: 'css',
  js: 'js'
}

// トランスパイルするファイルを列挙する
// _から始まるファイルは、他からimportされるためのファイルとして扱い、個別のファイルには出力しない
const files = {}
Object.keys(convertExtensions).forEach(from => {
  const to = convertExtensions[from]
  globule.find([`**/*.${from}`, `!**/_*.${from}`], {cwd: opts.srcDir}).forEach(filename => {
    files[filename.replace(new RegExp(`.${from}$`, 'i'), `.${to}`)] = path.join(opts.srcDir, filename)
  })
})

// pugでトランスパイルする
const pugLoader = [
  'apply-loader',
  'pug-loader'
]

// Sassをトランスパイルし、autoprefixerをかけるようにする
const sassLoader = [
  {
    loader: 'css-loader',
    options: {
      minimize: true
    }
  },
  {
    loader: 'postcss-loader',
    options: {
      ident: 'postcss',
      plugins: (loader) => [require('autoprefixer')()]
    }
  },
  'sass-loader'
]

// Babelでトランスパイルする
const jsLoader = {
  loader: 'babel-loader',
  query: {
    presets: ['env']
  }
}

const config = {
  context: opts.srcDir,
  entry: files,
  output: {
    filename: '[name]',
    path: opts.destDir
  },
  module: {
    rules: [
      {
        test: /.pug$/,
        use: ExtractTextPlugin.extract(pugLoader)
      },
      {
        test: /.sass$/,
        oneOf: [
          {
            // pugから `require('./hoge.sass?inline')` のように呼ばれた時は、ExtractTextPluginをかけない
            resourceQuery: /inline/,
            use: sassLoader
          },
          {
            // それ以外の時は、単純にファイルを生成する
            use: ExtractTextPlugin.extract(sassLoader)
          }
        ]
      },
      {
        test: /.js$/,
        exclude: /node_modules(?!/webpack-dev-server)/,
        use: jsLoader
      }
    ]
  },
  plugins: [
    new ExtractTextPlugin('[name]'),
    // convertExtensionsに含まれていないファイルは、単純にコピーする
    new CopyWebpackPlugin(
      [{from: {glob: '**/*', dot: true}}],
      {ignore: Object.keys(convertExtensions).map((ext) => `*.${ext}`)}
    ),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
    })
  ],
  devServer: {
    contentBase: opts.destDir,
    watchContentBase: true
  }
}

if (process.env.NODE_ENV === 'production') {
  config.plugins = config.plugins.concat([
    new webpack.optimize.UglifyJsPlugin(),
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.AggressiveMergingPlugin()
  ])
}

module.exports = config

以下は、この設定ファイルの説明だけなので、困った時にでも読んでください。

動機

僕はRailsが大好きですが、動的に生成する必要が無いサイトを作ることもたくさんあります。
そんな時に、今の時代HTML/CSS/JSを生で書くわけにもいかないので、トランスパイルしたくなるけど、どの静的サイトジェネレータもいまいちしっくりこない。
できれば、CSSはSassを使ってトランスパイルしたいし、autoprefixしてほしい。JSもバベりたい。

ということでWebpackをコテコテに設定して、いい感じにトランスパイルしてくれるようにしました。

仕組み

「トランスパイルするもの」と「それ以外」

トランスパイルするものは、Webpackの設定で、
それ以外のものは、そのままCopyWebpackPluginというもので、opts.destDirにコピーします。

複数ファイル出力

Webpackはentryに複数のキーを持ったObjectを指定すると、

{
  "出力先ファイル名": "ソースファイル"
}

の形で複数ファイルを出力してくれます。

これを利用して、JSもHTMLもCSSも、一緒くたに生成してしまいましょう。

HTML

まずHTMLですが、僕はPugが好きなので、Pugを使います。

pug-loaderはpugテンプレートから、requireすると「HTMLを生成するようなfunction」を返してくれるJSを生成するLoaderなので、これだけだと困ります。
なのでapply-loaderでfunctionを一度呼んでHTMLを生成することにします。

テンプレートのファイルは_hoge.pugのようにアンダーバーから始まるファイル名にすれば、トランスパイルのリストから除外することができます。

アクセスするURLをきれいにしたりしたい時は、filesのキーをいい感じに、いじると良さそうです。

SASS

<link>タグで読み込むCSSはそのまま、Sassで書きましょう。
link(rel="stylesheet" href=`/hoge.css?${+ new Date()}`)
みたいに書くと、キャッシュを無効化できて便利です。
(本当はWebpackのHashを使いたかったのですが、Pugから取得することが難しかったので今回はやめました)

<style>タグで、インラインに展開したいCSSは、
style= require("./hoge.sass?inline")
の様に書けば、インラインで展開できます。

インライン展開したい時は、ExtractTextPluginをかけないようにしないと、変な展開のされ方をしてしまいます。

@importで読み込むSassは、名前をアンダーバーから始めれば、それ単体ではトランスパイルされなくなります。

JS

JSは普通にBabelでトランスパイルするだけです。
Webpackの本来のお仕事なので、特に難しいことはありません。

その他

webpack-dev-serverですがJSを読み込んでいないHTMLでは、自動リロードが効かないようです。
これを直す方法が未だに見つけられていないので、もし知っている方がいたら教えてください。

それから今の所、ファイルが新規追加されたときには、手動でwebpack-dev-serverを起動し直さなければなりません。何かしら便利なコマンドなどを知っている方がいらっしゃいましたら、こちらも教えていただけると助かります。

  • コメント

    1. 匿名希望
      2018/01/17(水) 23:54:17

      トゥレーヌは、ひとつの社会には固有の根源的社会問題があり、解決する社会運動もひとつになるとした。

      一方、メルリッチは、現代社会は様々な要素で構成される「複合社会」であり、環境問題や差別といった社会問題が多様化された現代では、それを解決しようとする社会運動も多様化する、と論じた。

    2. 匿名希望
      2018/01/17(水) 23:54:17

      ヒヒぶち込めば解決するけどカトルは解放しやすい部類だしエタラブあるから風砕くのに迷い無いしでやらん要素そんな無いんだよなぁ 今回古戦場走る時間取れるか微妙でカトル居なくても別に困りはしないからヒヒかける価値あるかってのが問題

    3. 匿名希望
      2018/01/17(水) 23:54:17

      その先生が女性に嫌われる要素を持っている事は、男の俺から見てもなんとなくわかる。

      ただ、セクハラか?
      どの部分が?
      って感じだったwww
      (少なくとも俺の目の届く場所では)

      で、先生辞めて、女の子も辞める。
      …俺から見たら、元々問題がないのに一体何が解決したのか?って感じ。

    4. 匿名希望
      2018/01/17(水) 23:54:17

      それぞれがチャールズの問題解決に導くかたちで、帰り道に連れて行くのではなく自分で切り開かせたのが印象的でした。原作を読んだのはもう十数年前ですが、オリジナルの要素もあってとても新鮮で魅力的で世界に引き込まれました。ショーを観るのを楽しみにしてます。#シャイマス_LostAlice

    5. 匿名希望
      2018/01/17(水) 23:54:17

      幼稚園児の絵、よだれをたらしてる子が二人(笑)
      「深く考えてない」って事を表す為なのだろうか。
      うまくいかなくてギャーってなってうるさいしかなわん事多いけど
      暫くすると、あれだけ騒いでた問題を遊び感覚で試行錯誤の末に解決&プラスα要素付けてきたりするな。見習わないといけない。

    記事に戻る

関連記事