0
2

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.

VSCodeでタスクを作成して、テンプレの召喚やコンパイルをする

Last updated at Posted at 2020-12-20

#はじめに
こんにちは、今回はvscodeで作業を効率化するために、自分でタスクを作成したときのことを記します。
c++を例に書いてますが、他の設定でも参考になると思います。

今回は、フォルダごとの設定で、taskの作成をしてみます

まず作業フォルダとして、myworkフォルダを作成します。
vscodeではフォルダを開く->myworkを選択します。
そしてmyworkフォルダ以下に.vscodeフォルダを作成し、そこにtasks.jsonを作成します。
ソースコードはmywork/source以下に置くことにします。
image.png

#タスクでコンパイルさせる
以下のようなコードをコンパイルしたいとき

main.cpp
#include <iostream>

int main(){
    std::cout<<"Hello Task"<<"\n";
}
PowerShell
g++ source/main.cpp -o program

とコマンドを実行してやれば、program.exeがmywork下にできる。

これをTaskでやることを考える。

tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "cppCompile",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "program"
            ],
            "group":"none",
        },
    ]

}

.vscode/tasks.jsonに上の用に書いておくと、
main.cppをエディタで開いているときに
Ctrl+Shift+Pでコマンドパレットを開きRunTask
image.png
そうすると上で追加したタスクがある。
image.png
それを実行すると、
program.exeができている。

これは、mywork以下のどこにあるコードでも可能です。
tasks.jsonのコードが、現在エディタで開いているコードに対して、
コンパイルし、mywork下にprogram.exeとして実行ファイルを作成するよう書かれているからです。

これはvscodeが現在のファイルなどを示す変数を定義してくれており便利にかけます。

https://code.visualstudio.com/docs/editor/variables-reference
image.png

Taskで実行するコマンドの引数に${file}を指定すれば、現在開いているファイルに対する
コンパイルなどなんらかのことができます。

#テンプレ召喚

People.txt
class People{
public:
void Plus(int num);
private:
int m_age;
string m_name;
}

コードを書いているとき、上のようなclassが欲しくなったとします。
今回はコーディング中に上のPeople.txtを好きな位置に召喚するタスクを考えます。

まず、main.txtのN行目にtmp.txtをコピペするようなスクリプトを考えます。

cptemp.py
import sys
#How to use
# cptemp.py 編集中ファイル 行  テンプレが書かれたファイル
fname=sys.argv[1]
f1name=sys.argv[3]
linenum=sys.argv[2]
with open(fname) as f:
    data = f.readlines()
linenum=(int)(linenum)-1
with open(f1name) as f:
    predata = f.readlines()
kaki=''
for i in predata:
    kaki+=i
data.insert(linenum,kaki)
with open(fname,mode='w') as f:
    f.writelines(data)

上のcptemp.pyを実行すると、指定行に指定したファイルを貼り付けます。
toolsというフォルダを作り、このスクリプトをおいておき、
Taskから呼び出し、テンプレを呼び出します。
cptemp.py引数にはvscodeでもともと定義された${file},${lineNumber}などを与えれば、
うまくいきそうだ。

ここまでのファイル構成
image.png

そして、tasks.jsonにadd Peopleというタスクを追記します。

tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "cppCompile",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "program"
            ],
            "group":"none",
        },
        {
            "type": "shell",
            "label": "add people",
            "command": "python3",
            "args": [
                "${workspaceFolder}/tools/cptemp.py",
                "${file}",
                "${lineNumber}",
                "${workspaceFolder}/template/People.txt",
            ],
            "group":"none",
        },
    ]

}

これでmain.cpp編集中に、
image.png
Ctrl+Shift+Pでコマンドパレットを開きRunTask
からadd Peopleを選択して実行すると

image.png
image.png

上記のように追加されました!!!

#おわりに
とりあえず、とくやる作業をタスクとして呼び出せるようにしたいという目的で
やったことをまとめました。

当然最適なやり方ではないですし、
Taskの書き方なども適当なので、他の方の記事も読んだほうがいいと思います。
ありがとうございました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?