読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Javascript のオブジェクトで特定のkey以外ほしい場合のメモ

いつも悩むのでメモ

const data = {
  last_name: '夏目',
  first_name: '漱石',
  created_at: "2017-03-21T12:00:00.000000",
  updated_at: "2017-03-21T12:00:00.000000",
};
const IGNORE_KEYS = [
  'created_at',
  'updated_at',
];

const filterIgnoreObject = (data, ignoreKeys) => {
  const convertedData = {};

  for (const key in data) {
    if (!ignoreKeys.filter(ignoreKey => ignoreKey === key).length) {
      convertedData[key] = data[key];
    }
  }
  return convertedData;
};

console.info(filterIgnoreObject(data, IGNORE_KEYS));
//-> { last_name: '夏目', first_name: '漱石' }

こんな感じ?
もっとスマートな方法ないかな

Mac標準の日本語入力に絶望したので Google日本語入力に乗り換えるメモ

漢字トーク7の頃からことえりを使ってたけど最近のMac標準日本語入力の誤変換が酷い 気がするので乗り換えることにした。(過去3回くらい試したことあるけど…)

Google日本語入力をインストール

$ brew cask install google-japanese-ime

要OS再起動

ユーザー辞書を移植する

これを忘れていた。ささっと簡単に置換してしまおう。
とりあえずユーザ辞書.plist`を書き出す

  • システム環境設定 > キーボード > ユーザ辞書
  • 入力・変換のとこで全選択してドラッグアンドドロップ
  • ユーザ辞書.plist ファイルができる

ユーザ辞書.plist` (例)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>phrase</key>
        <string>七十七銀行</string>
        <key>shortcut</key>
        <string>77ぎんこう</string>
    </dict>
    <dict>
        <key>phrase</key>
        <string>魁力屋</string>
        <key>shortcut</key>
        <string>かいりきや</string>
    </dict>
    <dict>
        <key>phrase</key>
        <string>上杉</string>
        <key>shortcut</key>
        <string>かみすぎ</string>
    </dict>
</array>
</plist>

正規表現で置換

CotEditer v3.xで置換した

検索

^    <dict>
        <key>phrase</key>
        <string>(.*?)</string>
        <key>shortcut</key>
        <string>(.*?)</string>
    </dict>$

置換

$2\t$1\t名詞\t

結果

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
77ぎんこう  七十七銀行 名詞  
かいりきや 魁力屋   名詞  
かみすぎ    上杉  名詞  
</array>
</plist>

これのタグ部分を削除して必要な読み仮名などのみを hoge.txt に保存

Google日本語入力の辞書ツールでインポート

辞書ツールを起動して辞書名を右クリック的なのでメニュー表示して hoge.txt をインポートする

感想

いい感じで変換できる気がする

Javascript でカタカナ->ひらがな変換とか全角英数->半角英数に変換とかのメモ

カタカナ->ひらがな変換

const katakanaToHiragana = (katakana) => {
  return katakana.replace(/[\u30a1-\u30f6]/g, (match) => {
    const chr = match.charCodeAt(0) - 0x60;
    return String.fromCharCode(chr);
  });
};

console.info(katakanaToHiragana('カタカナヴ'));
//-> かたかなゔ

全角英数->半角英数に変換

const zenkakuEisuToHankaku = (str) => {
  return str.replace(/[A-Za-z0-9]/g, (s) => {
    return String.fromCharCode(s.charCodeAt(0)-0xFEE0);
  });
};

console.info(zenkakuEisuToHankaku('ABCDEfghi12345'));
//-> ABCDEfghi12345

文字列を半角数字のみに変換

const stringToOnlyNumbers = (str) => {
  return zenkakuEisuToHankaku(str).replace(/[^0-9]/g, '');
};

console.info(stringToOnlyNumbers('foo12bar34HOGE56fuga78'));
//-> 12345678

参考

Javascript のソースコードを prettier で git commit 時に自動で整形してみるメモ

インストール

$ npm init -y
$ npm install -D prettier lint-staged husky

package.json

precommit と lint-staged を追加

{
  "scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "*.js": [
      "prettier --write",
      "git add"
    ]
  }
}

.git/hooks/pre-commit

#!/bin/sh
npm run precommit

exit 0

コミットしてみる

index.js(コミット前)

const foo = {
    a: 1,
    b: 2,
    c: 3,
}

const bar = {c:'d'}

const baz = ["foo", "bar", "baz", "foo", "bar", "baz", "foo", "bar", "baz", "foo", "bar", "baz"]

console.info(foo)
console.info(bar)
console.info(baz)

コミットして見る

$ git add index.js
$ git commit -m "add index.js"

index.js(コミット後)

const foo = {
  a: 1,
  b: 2,
  c: 3
};

const bar = { c: "d" };

const baz = [
  "foo",
  "bar",
  "baz",
  "foo",
  "bar",
  "baz",
  "foo",
  "bar",
  "baz",
  "foo",
  "bar",
  "baz"
];

console.info(foo);
console.info(bar);
console.info(baz);

おまけ

prettier の整形の設定は6個くらい (gofmt は変更できる設定は0)

$ node_modules/.bin/prettier --help
Usage: prettier [opts] [filename ...]

Available options:
  --write                  Edit the file in-place. (Beware!)
  --list-different or -l   Print filenames of files that are different from prettier formatting
  --stdin                  Read input from stdin.
  --print-width <int>      Specify the length of line that the printer will wrap on. Defaults to 80.
  --tab-width <int>        Specify the number of spaces per indentation-level. Defaults to 2.
  --single-quote           Use single quotes instead of double.
  --bracket-spacing        Put spaces between brackets. Defaults to true.
  --jsx-bracket-same-line  Put > on the last line. Defaults to false.
  --trailing-comma <none|es5|all>
                           Print trailing commas wherever possible. Defaults to none.
  --parser <flow|babylon>  Specify which parse to use. Defaults to babylon.
  --color                  Colorize error messages. Defaults to true.
  --version or -v          Print prettier version.

Boolean options can be turned off like this:
  --no-bracket-spacing
  --bracket-spacing=false

追記

配列を改行したくても1行になったりのケース

デフォルトで –print-width 80 だとそれ以下の文字数の場合に改行してると1行に変換されてしまう。

整形前

const baz = [
  "foo",
  "bar",
  "baz",
  "foo",
  "bar",
  "baz",
]

整形後

const baz = ["foo", "bar", "baz", "foo", "bar", "baz", "foo", "bar", "baz"];

Reactのソースコードで使われてるらしいけど

感想

  • prettier 使わずに eslint でチェックしつつコード書くでもいいかも?
  • eslintrc –fix でもいいような気がしてきた
  • 既存コードを大量に整形しないといけないとかだったら prettier 便利かも

参考