Skip to content

Commit 822ee14

Browse files
authored
Merge pull request #822 from devlights/add-gitignore-app-example
2 parents 62e5430 + be733a5 commit 822ee14

File tree

5 files changed

+334
-19
lines changed

5 files changed

+334
-19
lines changed
Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
# これは何?
2+
3+
[gitignore.io](https://www.toptal.com/developers/gitignore/) のAPIを利用してプログラム言語の ```.gitignore``` ファイルを作成するツールです。
4+
5+
windows用とlinux用のバイナリを用意しています。
6+
7+
- Windows
8+
- bin/windows/amd64/gitignore.exe
9+
- Linux
10+
- bin/linux/amd64/gitignore
11+
12+
## 使い方
13+
14+
```sh
15+
$ ./gitignore.exe help
16+
gitignore - .gitignoreを生成するツール
17+
18+
Usage:
19+
gitignore [lang|list]
20+
21+
Subcommands:
22+
lang 指定した言語で .gitignore を出力
23+
list 利用可能言語リストを出力
24+
25+
Flags:
26+
--version Displays the program version string.
27+
-h --help Displays help with available flag, subcommand, and positional value parameters.
28+
```
29+
30+
サブコマンドには ```lang``````list``` があります。
31+
32+
例として java の ```.gitignore``` を出力したい場合は
33+
34+
```sh
35+
$ ./gitignore.exe lang java > .gitignore
36+
```
37+
38+
Cの場合は
39+
40+
```sh
41+
$ ./gitignore.exe lang c > .gitignore
42+
```
43+
44+
C++の場合は
45+
46+
```sh
47+
$ ./gitignore.exe lang c++ > .gitignore
48+
```
49+
50+
Goの場合は
51+
52+
```sh
53+
$ ./gitignore.exe lang go > .gitignore
54+
```
55+
56+
Pythonの場合は
57+
58+
```sh
59+
$ ./gitignore.exe lang python > .gitignore
60+
```
61+
62+
.NETの場合は
63+
64+
```sh
65+
$ ./gitignore.exe lang visualstudio > .gitignore
66+
```
67+
68+
対応している言語のリストを見る場合は ```list``` を使います。
69+
70+
```sh
71+
$ ./gitignore.exe list
72+
1c,1c-bitrix,a-frame,actionscript,ada
73+
adobe,advancedinstaller,adventuregamestudio,agda,al
74+
alteraquartusii,altium,amplify,android,androidstudio
75+
angular,anjuta,ansible,ansibletower,apachecordova
76+
apachehadoop,appbuilder,appceleratortitanium,appcode,appcode+all
77+
appcode+iml,appengine,aptanastudio,arcanist,archive
78+
archives,archlinuxpackages,asdf,aspnetcore,assembler
79+
astro,ate,atmelstudio,ats,audio
80+
autohotkey,automationstudio,autotools,autotools+strict,awr
81+
azurefunctions,azurite,backup,ballerina,basercms
82+
basic,batch,bazaar,bazel,bitrise
83+
bitrix,bittorrent,blackbox,blender,bloop
84+
bluej,bookdown,bower,bricxcc,buck
85+
c,c++,cake,cakephp,cakephp2
86+
cakephp3,calabash,carthage,certificates,ceylon
87+
cfwheels,chefcookbook,chocolatey,circuitpython,clean
88+
clion,clion+all,clion+iml,clojure,cloud9
89+
cmake,cocoapods,cocos2dx,cocoscreator,codeblocks
90+
codecomposerstudio,codeigniter,codeio,codekit,codesniffer
91+
coffeescript,commonlisp,compodoc,composer,compressed
92+
compressedarchive,compression,conan,concrete5,coq
93+
cordova,craftcms,crashlytics,crbasic,crossbar
94+
crystal,cs-cart,csharp,cuda,cvs
95+
cypressio,d,dart,darteditor,data
96+
database,datarecovery,dbeaver,dbt,defold
97+
delphi,deno,dframe,diff,direnv
98+
diskimage,django,dm,docfx,docpress
99+
docusaurus,docz,dotenv,dotfilessh,dotnetcore
100+
dotsettings,doxygen,dreamweaver,dropbox,drupal
101+
drupal7,drupal8,e2studio,eagle,easybook
102+
eclipse,eiffelstudio,elasticbeanstalk,elisp,elixir
103+
elm,emacs,ember,ensime,episerver
104+
erlang,espresso,executable,exercism,expressionengine
105+
extjs,fancy,fastlane,finale,firebase
106+
fish,flashbuilder,flask,flatpak,flex
107+
flexbuilder,floobits,flutter,font,fontforge
108+
forcedotcom,forgegradle,fortran,freecad,freepascal
109+
fsharp,fuelphp,fusetools,games,gatsby
110+
gcov,genero4gl,geth,ggts,gis
111+
git,gitbook,go,godot,goland
112+
goland+all,goland+iml,goodsync,gpg,gradle
113+
grails,greenfoot,groovy,grunt,gwt
114+
haskell,helm,hexo,hol,homeassistant
115+
homebrew,hsp,hugo,hyperledgercomposer,iar
116+
iar_ewarm,iarembeddedworkbench,idapro,idris,igorpro
117+
images,infer,inforcms,inforcrm,intellij
118+
intellij+all,intellij+iml,ionic3,jabref,janet
119+
java,jboss,jboss-4-2-3-ga,jboss-6-x,jboss4
120+
jboss6,jdeveloper,jekyll,jenv,jetbrains
121+
jetbrains+all,jetbrains+iml,jgiven,jigsaw,jmeter
122+
joe,joomla,jsonnet,jspm,julia
123+
jupyternotebooks,justcode,kaldi,kate,kdevelop4
124+
kdiff3,keil,kentico,keystonejs,kicad
125+
kirby2,kirby3,kobalt,kohana,komodoedit
126+
konyvisualizer,kotlin,labview,labviewnxg,lamp
127+
laravel,latex,lazarus,leiningen,lemonstand
128+
less,liberosoc,librarian-chef,libreoffice,lighthouseci
129+
lilypond,linux,lithium,localstack,logtalk
130+
lsspice,ltspice,lua,lyx,macos
131+
magento,magento1,magento2,magic-xpa,matlab
132+
maven,mavensmate,mdbook,mean,mercurial
133+
mercury,meson,metals,metalsmith,metaprogrammingsystem
134+
meteor,meteorjs,microsoftoffice,mikroc,mill
135+
moban,modelsim,modx,momentics,monodevelop
136+
mplabx,mule,nanoc,nativescript,ncrunch
137+
nesc,netbeans,nette,nextjs,nikola
138+
nim,ninja,node,nodechakratimetraveldebug,nohup
139+
notepadpp,nova,now,nuxtjs,nwjs
140+
objective-c,obsidian,ocaml,octave,octobercms
141+
opa,opencart,opencv,openfoam,openframeworks
142+
openframeworks+visualstudio,oracleforms,orcad,osx,otto
143+
oxideshop,oxygenxmleditor,packer,pants,particle
144+
patch,pawn,perl,perl6,ph7cms
145+
phalcon,phoenix,php-cs-fixer,phpcodesniffer,phpstorm
146+
phpstorm+all,phpstorm+iml,phpunit,pico8,pimcore
147+
pimcore4,pimcore5,pinegrow,platformio,playframework
148+
plone,polymer,powershell,premake-gmake,prepros
149+
prestashop,processing,progressabl,psoccreator,pulumi
150+
pulumi+stacks,puppet,puppet-librarian,purebasic,purescript
151+
putty,pvs,pycharm,pycharm+all,pycharm+iml
152+
pydev,python,pythonvanilla,qml,qooxdoo
153+
qt,qtcreator,r,racket,rails
154+
react,reactnative,reasonml,red,redcar
155+
redis,remix,remix+arc,remix+cloudflarepages,remix+cloudflareworkers
156+
remix+netlify,remix+vercel,renpy,replit,retool
157+
rhodesrhomobile,rider,robotframework,root,ros
158+
ros2,ruby,rubymine,rubymine+all,rubymine+iml
159+
rust,rust-analyzer,salesforce,salesforcedx,sam
160+
sam+config,sas,sass,sbt,scala
161+
scheme,scons,scrivener,sdcc,seamgen
162+
senchatouch,serverless,shopware,silverstripe,sketchup
163+
slickedit,smalltalk,snap,snapcraft,snyk
164+
solidity,soliditytruffle,sonar,sonarqube,sourcepawn
165+
spark,specflow,splunk,spreadsheet,ssh
166+
standardml,stata,stdlib,stella,stellar
167+
storybookjs,strapi,stylus,sublimetext,sugarcrm
168+
svelte,svn,swift,swiftpackagemanager,swiftpm
169+
symfony,symphonycms,synology,synopsysvcs,tags
170+
tarmainstallmate,terraform,terragrunt,test,testcomplete
171+
testinfra,tex,text,textmate,textpattern
172+
theos-tweak,thinkphp,tla+,toit,tortoisegit
173+
tower,turbo,turbogears2,twincat3,tye
174+
typings,typo3,typo3-composer,umbraco,unity
175+
unrealengine,vaadin,vagrant,valgrind,vapor
176+
vcpkg,venv,vercel,vertx,video
177+
vim,virtualenv,virtuoso,visualbasic,visualstudio
178+
visualstudiocode,vivado,vlab,vrealizeorchestrator,vs
179+
vue,vuejs,vvvv,waf,wakanda
180+
web,webmethods,webstorm,webstorm+all,webstorm+iml
181+
werckercli,windows,wintersmith,wordpress,wyam
182+
xamarinstudio,xcode,xcodeinjection,xilinx,xilinxise
183+
xilinxvivado,xill,xmake,xojo,xtext
184+
y86,yalc,yarn,yeoman,yii
185+
yii2,zendframework,zephir,zig,zsh
186+
zukencr8000
187+
```
188+
189+
## 参考情報
190+
191+
- https://zenn.dev/kiri_i/articles/gitignore_io
192+
- https://docs.gitignore.io/use/api
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
vars:
6+
APP: bin/{{OS}}/{{ARCH}}/gitignore{{exeExt}}
7+
8+
tasks:
9+
default:
10+
cmds:
11+
- task: build
12+
fmt:
13+
cmds:
14+
- goimports -w .
15+
prepare:
16+
cmds:
17+
- mkdir -p bin/windows/amd64
18+
- mkdir -p bin/linux/amd64
19+
build:
20+
deps: [ prepare, fmt ]
21+
cmds:
22+
- GOOS=linux GOARCH=amd64 go build -o bin/linux/amd64/gitignore .
23+
- GOOS=windows GOARCH=amd64 go build -o bin/windows/amd64/gitignore.exe .
24+
run:
25+
deps: [ build ]
26+
cmds:
27+
- ./{{.APP}} {{.CLI_ARGS}}
28+
clean:
29+
cmds:
30+
- rm -rf bin

examples/singleapp/gitignore/main.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"log"
7+
"net/http"
8+
"os"
9+
10+
"github.com/integrii/flaggy"
11+
)
12+
13+
const (
14+
BASE_URL = "https://gitignore.io/api/"
15+
)
16+
17+
var (
18+
langCmd *flaggy.Subcommand
19+
listCmd *flaggy.Subcommand
20+
21+
lang string
22+
)
23+
24+
func init() {
25+
langCmd = flaggy.NewSubcommand("lang")
26+
langCmd.Description = "指定した言語で .gitignore を出力"
27+
langCmd.AddPositionalValue(&lang, "", 1, true, "言語 (ex: go, python, java,,,)")
28+
29+
listCmd = flaggy.NewSubcommand("list")
30+
listCmd.Description = "利用可能言語リストを出力"
31+
32+
flaggy.AttachSubcommand(langCmd, 1)
33+
flaggy.AttachSubcommand(listCmd, 1)
34+
35+
flaggy.SetName("gitignore")
36+
flaggy.SetDescription(".gitignoreを生成するツール")
37+
flaggy.SetVersion("v1.0.0")
38+
}
39+
40+
func main() {
41+
flaggy.Parse()
42+
43+
if err := run(); err != nil {
44+
log.Fatal(err)
45+
}
46+
}
47+
48+
func run() error {
49+
var (
50+
err error
51+
)
52+
53+
switch {
54+
case langCmd.Used:
55+
err = request(fmt.Sprintf("%s%s", BASE_URL, lang))
56+
case listCmd.Used:
57+
err = request(fmt.Sprintf("%s%s", BASE_URL, "list"))
58+
default:
59+
flaggy.ShowHelp("")
60+
}
61+
62+
if err != nil {
63+
return err
64+
}
65+
66+
return nil
67+
}
68+
69+
func request(url string) error {
70+
var (
71+
res *http.Response
72+
err error
73+
)
74+
75+
res, err = http.Get(url)
76+
if err != nil {
77+
return err
78+
}
79+
defer res.Body.Close()
80+
81+
_, err = io.Copy(os.Stdout, res.Body)
82+
if err != nil {
83+
return err
84+
}
85+
86+
return nil
87+
}

go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ go 1.22
44

55
require (
66
github.com/devlights/gomy v0.6.0
7-
github.com/pelletier/go-toml/v2 v2.2.1
7+
github.com/integrii/flaggy v1.5.2
8+
github.com/pelletier/go-toml/v2 v2.2.2
89
github.com/shopspring/decimal v1.4.0
9-
golang.org/x/crypto v0.22.0
10-
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8
10+
golang.org/x/crypto v0.24.0
11+
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8
1112
golang.org/x/sync v0.7.0
12-
golang.org/x/term v0.19.0
13-
golang.org/x/text v0.14.0
13+
golang.org/x/sys v0.21.0
14+
golang.org/x/term v0.21.0
15+
golang.org/x/text v0.16.0
1416
gopkg.in/ini.v1 v1.67.0
1517
gopkg.in/natefinch/lumberjack.v2 v2.2.1
1618
gopkg.in/yaml.v3 v3.0.1
1719
)
18-
19-
require golang.org/x/sys v0.19.0 // indirect

go.sum

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
33
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
44
github.com/devlights/gomy v0.6.0 h1:7BT8bSxr+ZeNkgEYNufuM2rSc6kIoN6g2FSZvrcT9zw=
55
github.com/devlights/gomy v0.6.0/go.mod h1:d28qyQ+/s7JravMlss2kIFxWxhY2KLlpe7rIBZ5YKeA=
6-
github.com/pelletier/go-toml/v2 v2.2.1 h1:9TA9+T8+8CUCO2+WYnDLCgrYi9+omqKXyjDtosvtEhg=
7-
github.com/pelletier/go-toml/v2 v2.2.1/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
6+
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
7+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
8+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
9+
github.com/integrii/flaggy v1.5.2 h1:bWV20MQEngo4hWhno3i5Z9ISPxLPKj9NOGNwTWb/8IQ=
10+
github.com/integrii/flaggy v1.5.2/go.mod h1:dO13u7SYuhk910nayCJ+s1DeAAGC1THCMj1uSFmwtQ8=
11+
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
12+
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
813
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
914
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
1015
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
@@ -18,18 +23,19 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
1823
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
1924
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
2025
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
21-
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
22-
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
23-
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc=
24-
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
26+
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
27+
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
28+
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY=
29+
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI=
2530
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
2631
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
27-
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
28-
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
29-
golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
30-
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
31-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
32-
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
32+
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
33+
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
34+
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
35+
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
36+
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
37+
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
38+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
3339
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
3440
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
3541
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=

0 commit comments

Comments
 (0)