14
0

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 5 years have passed since last update.

Life is Tech ! メンターAdvent Calendar 2017

Day 24

No more war, No more typo!

Last updated at Posted at 2017-12-23

はじめに

戦争や飢え、貧困など、クリスマスイブの今日でさえ、世界中では悲しい出来事がたくさん起きています。そのうちの一つがtypo, つまり誤植です。

screenshot.png

コードレビューでtypoが見つかるとめちゃくちゃ恥ずかしい :imp:
typoの無い平和な世界を実現したい :angel:
ということで、typoチェックをしてくれるXcode Source Editor Extensionを作りました。

Xcode Source Editor Extension

大雑把にいうと、昔あった"Alcatraz"みたいなやつです。Xcodeが便利になります。
作り方は

などを参考にさせていただきました。

NoMoreTypo

256.png

NoMoreTypoは、XcodeでソースのtypoチェックをしてくれるExtensionです。
命名部分とString部分がチェック可能で、typoが見つかると単語候補とともに該当する行の下に表示されます。
スクリーンショット 2017-12-07 12.24.13.png

typoが見つからなかった場合は、ソースの先頭にこんな感じでコメントアウトがつきます。
スクリーンショット 2017-12-07 12.25.17.png

実装

まず、上のサイトではちょっとわからなかったところを交えつつ実装の話をします。

プロジェクト名

実装ではExtensionのみを作るのではなく、macOSアプリにExtensionを載せるような形になります。なのでApplicationとExtensionで別の名前をつけないといけません。
awesome-xcode-extensionsを参考に、こんな風に命名しました。

Project: NoMoreTypoForXcode
Extension: NoMoreTypo
スクリーンショット 2017-12-07 11.23.39.png

ApplicationをNoMoreTypoにして、ExtensionをNoMoreTypo Extensionなどの命名にしているものもありました。でもNavigationにはExtensionの方の名前で表示されるので、そちらをメインにすることにします。

スクリーンショット 2017-12-07 11.26.15.png

正規表現を用いた文字列の切り出し

まずはじめに、命名部分を取り出します。

(?<=(^|\\s)(let|var|func|class|enum|struct)\\s)[a-zA-Z0-9_]+

この正規表現では、変数名/関数名/クラス名などを取得できます。命名に使えるのは英数字とアンダースコアのみなので、[a-zA-Z0-9_]+でカバーしています。
次に、取り出した命名部分を単語ごとに分けます。

[a-zA-Z][a-z]+

この正規表現では、

  • キャメル記法
    • hogeFuga
    • HogeFuga
  • スネーク記法
    • hoge_fuga

以上2つの記法を単語ごとに切り出すことができます。大文字スネーク記法のようなもの(HOGE_FUGA)は単語ごとに切り出せません。
正規表現はこちらのiOSエンジニアの正規表現入門を参考にさせていただきました。

タイポチェック

NSSpellCheckerという便利なクラスを使ってタイポチェックを行います。なんと単語の候補まで教えてくれます。
iOSにも同じような機能でUITextCheckerというものがあります。スゴイ!

Xcode Source Editor Extensionの配布方法

そのままgithubにあげます。READMEに後述のインストール手順を書いておきましょう。

使い方

  1. NoMoreTypogit clone
  2. ApplicationとExtension両方のSigningを自分のDeveloper IDに変更
スクリーンショット 2017-12-07 15.40.42.png
  1. Product -> Archive

  2. Export -> Export App
    スクリーンショット 2017-12-08 0.04.26.png

  3. エクスポートしたNoMoreTypoForXcodeをアプリケーションフォルダに移動

  4. NoMoreTypoForXcodeを起動

  5. Enable Extensionをクリック

  6. システム環境設定の機能拡張パネルが開くので、Xcode Source ExtensionのタブでNoMoreTypoにチェックが入っていることを確認

  7. Xcodeを再起動

  8. Editor -> NoMoreTypo

    • Check typo in name -> 命名部分のtypoをチェック
    • Check typo in String -> ""で囲まれた文字列内のtypoをチェック

今後の展望

  • ""の中で\(変数)や\nなどを使っている場合、変数名やエスケープ文字まで取り出してしまうので、正規表現を改善する
  • アプリ名などの造語が引っかかってしまわないように、typo判定しないリストをつける
  • ソースコードに直接書き込むのではなく、もっといい感じにだす
    • 「コンソールに書き込めといいよね」とアドバイスをいただいたので調べてます

まとめ

NoMoreTypoでtypoなき平和なコーディングライフを :tada:
Xcodeにこんな機能があったらなあと思うものはExtensionで意外と作れる :ok_woman:

追記

NoMoreTypoのソースコードでめっちゃtypoしてました。
InNoMoreTypo.png

14
0
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
14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?