OSSãã¹ã¹ã¡
ã€ããã¹ã¹ã¡ãšããã¢ãã¡ã®ã¿ã€ãã«ãç䌌ãŸããïŒç¬ïŒ
å®ã¯äžåºŠãèŠãããšãããŸããããããŸããâŠâŠã
ããŠãæ¬é¡ã§ããçããã¯OSSãèªãããšã¯ãããŸããïŒ
èªåã¯å²ãšèªãããšããããŸãïŒ
èªåã®çµéšäžã§ããOSSãèªãããšã§åŸããããã®ããããããããŸããã
QiitaãZennã®èšäºã ãã§ãªãOSSãåèã«ããŸãããïŒ
ãªãOSSãèªãã®ãïŒ
çãããäžåºŠã¯ãããšæããã§ãã
ã³ãŒããæžããŠããæããã©ãããé¢šã«æžãã®ãè¯ãã®ã ãããïŒããšèããããšã¯ç¡ãã§ããããïŒ
æžãããã ããæ¬åœã«ãã®æžãã¶ãã§ããã®ã ãããâŠâŠãšæã£ãããšã¯ãªãã§ããããïŒ
ããã§ãïŒ ãããªæãã OSSãèªã¿ãŸãããïŒ
OSSãèªãããšã«ãã£ãŠè§£æ±ºããããš
- ããããæã¯ã©ã®ããã«ããŠæžãããè¯ããã ãããïŒ
- äžè¬çã«ã¯ã©ã®ããã«å®è£ ããã®ã ãããïŒ
- ãªããæžãããã©ãã£ãšDryã«æžããã®ã§ã¯ãªãã ãããïŒ
- èªç€Ÿã®ãããã¯ãã«åèã«ãªãã³ãŒãããªãïŒïŒ ã©ããããâŠâŠ
ãããªçåã解決ããæå©ãã«ãªããŸãïŒ
QiitaãZennã®èšäºã§ã¯é§ç®ãªã®ïŒ
ãã¡ãããQiitaãZennã®èšäºã§çåã解決ããããšããããŸãã
ãã ããã®èšäºãæžãããææã«ãã£ãŠåèã«ãã¹ããã©ãããèããªããšãããŸããã
ã¢ããªã±ãŒã·ã§ã³ã¯æ¥ã é²åããŠãããããæ°å¹Žåã®èšäºã¯ãããããããã䜿ããªããã®ã«ãªã£ãŠãããããããŸããããŸãã¯äžæ¬¡æ å ±ãèŠã«è¡ãçãã€ãããšå人çã«ã¯ãããšæã£ãŠããŸãã
èªåã¯èª¿ã¹ãæã¯å¿
ã äžçªåãã¯å
¬åŒããã¥ã¡ã³ã ãèŠã«è¡ãããã«ããŠããŸããåŸèŒ©ã«ãããæããŠããŸãã
倧äœãå
¬åŒããã¥ã¡ã³ãã§äºè¶³ããããšãå€ãã§ãããã¡ãã£ãšãããããããšãããããšãããšé端ã«ããããããªããªãããšããããŸãã
ãããªæã«èªåãå ¬åŒããã¥ã¡ã³ãã®æ¬¡ã«åèã«ããã®ãOSSã§ãããã㊠è±èªã®èšäº ãQiitaãZennã®èšäº ãšããé çªãå²ãšå€ãã§ãã
決ããŠQiitaãZennã®èšäºãåŠå®ããŠããããã§ã¯ãããŸãããèªåããã¡ããã¡ãåèã«ãããŠããã£ãŠããŸãïŒ
é çªã«ãããšä»¥äžã®ããã«ãªããŸãã
- å ¬åŒããã¥ã¡ã³ã
- OSS
- è±èªã®èšäº
- QiitaãZenn
è±èªã®èšäºã®æ¢ãæ¹
å°ãã ãæšªéã§ããè±èªã®èšäºã®æ¢ãæ¹ãã€ãã§ã«ç޹ä»ããŠãããŸãã
以åãèªåãæžããèšäºã§ç³ãèš³ãªããã§ããChromeã®ã¢ãã¬ã¹ããŒã®ã«ã¹ã¿ãã€ãºæ¹æ³ãåèã«ããŠè±èªèšäºã ããç°¡åã«æ€çŽ¢ã§ããããã«ããŸãã
æ€çŽ¢ãšã³ãžã³ã®è¿œå ã§ä»¥äžã®URLãèšå®ããŠãããšãã€ã§ãã¢ãã¬ã¹ããŒããç°¡åã«è±èªèšäºã ããæ€çŽ¢ã§ããããã«ãªããŸãã
Qiitaã§èšäºæ€çŽ¢åºæ¥ãããã«ãããšãããšãããåèã«ããŠãã ããã
javascript:(
function() {
const input = decodeURIComponent('%s');
window.open(`https://www.google.co.jp/search?q=${encodeURIComponent(input)}&lr=-lang_ja`);
}
)();

OSSã®èªã¿æ¹
ã§ã¯å®éã«OSSãèªãæã¯ã©ããã£ãŠèªãã°è¯ãã®ãïŒ
èªåã®èªã¿æ¹ã玹ä»ããŸãïŒ
- 1ã€ã®ãããžã§ã¯ãã ãã§ãªããè€æ°ã®ãããžã§ã¯ããåèã«ãã
- OSSå士ã§äŒŒããããªæžãã¶ããããã®ã§ãããåèã«ãã
- äžèº«ãçè§£ããããšããã®ã§ã¯ãªãæžãã¶ããèŠã
ãªãæžãã¶ããèŠãã®ïŒ
OSSãèªãã§ããŠèªåã¯ããããããšãªãã§ãããèªãã§ãçè§£ã§ããªãããšããããŸãã
ããã¯å®å
šã«èªåã®å®åäžè¶³ããããã§ãããåŠçãããæã®åææ¡ä»¶ãªã©ã¯OSSã§ææ¡ããã«ã¯æéãããããŸãâŠâŠã
ãªã®ã§äžèº«ãçè§£ããããšããã«æžãã¶ãã«æ³šåããŸãïŒ
ãã®æžãã¶ããå
ã«ããã«Googleã§æ€çŽ¢ããããšã§çè§£ãæ·±ãŸããŸãã
ãªãã ãã®ã¡ãœããã¯ð€ãâãGoogleæ€çŽ¢ãâãããïŒãããªãã®ããã£ãã®ãð®
ã¿ãããªæ°ä»ãããããããŸããããªã®ã§OSSã®äžèº«ãçè§£ããªããŠã倧äžå€«ã§ãã
ãã¡ãããäžèº«ãçè§£ã§ããæ¹ã¯çè§£ããäžã§èªããšè¯ããšæããŸãïŒ
å®éã«OSSãèªãã§ã¿ã
ä»åã¯Railsã®OSSãèªãã§ããããšæããŸãããŸãã¯ã©ã®OSSãåèã«ãããããã ããããšè¿·ããŸãããâŠâŠã
èªåã¯Githubã§ã¹ã¿ãŒæ°ã®å€ããããžã§ã¯ããåèã«ããããšãå€ãã§ããåºæ¬çã«ã¯ä»¥äžã®ãªããžããªãåèã«ããŠããŸãã
2021/06/30 æç¹ã®æ å ±ã§ãã®ã§å€ãå¯èœæ§ããããŸãã
| ãªããžã㪠| Rails | Ruby | star |
|---|---|---|---|
| forem | 6.0.3 | 2.7.2 | 16,947 |
| gitlabhq | 6.1.3.2 | 2.7.2 | 22,637 |
| huginn | 6.0.3.1 | 2.5.0ä»¥äž | 31,735 |
| postal | 5.2.5 | 2.3.0ä»¥äž | 10,553 |
| mastodon | 6.1.3 | 2.5.0 ã 3.1.0 | 24,375 |
| discourse | ææ° | 2.7.0ä»¥äž | 33,541 |
| spree | 6.1 or 6.0 or 5.2 | 2.5 or 2.6 or 2.7 or 3.0 | 11,291 |
before_destroy ã調ã¹ãŠã¿ã
以åãããæ©èœæ¹ä¿®ã§ã®ããšã§ãã
åŸèŒ©ã« before_destroy ã䜿çšããŸãããšå ±åãåããŸããããã èªåã before_destroy ã䜿çšããããšããªãã£ãã®ã§ãã® Active Record ã³ãŒã«ãã㯠ã¯äžäœã©ãããæã«äœ¿ãã¹ããªã®ã ãããâŠâŠãšæã OSS ãèªãã§ã¿ãããšã«ããŸããã
Google ã§åçŽã«æ€çŽ¢ããŠã¿ã
Googleã§æ€çŽ¢ããŠã¿ããšTOPã«ã¯ model ã®åé€å¯åŠãã§ãã¯ãåºãŠããŠããŸãã

forem ã® OSS ã§ æ€çŽ¢ããŠã¿ã
GitHubã®æ€çŽ¢æ©èœã䜿çšã before_destory ãæ€çŽ¢ããŸãã
cache ãšåã®ä»ãã¡ãœãããå®è¡ããŠããããšãå€ãããã§ããã¡ãœããåããå¯ããã«ããŒã¿ã®åé€ãšäžç·ã«ãã£ãã·ã¥ã«å¯ŸããŠäœããè¡ããããªããšãå€ããã§ãã

Googleæ€çŽ¢ãšæ¯ã¹ãŠã¿ãŸããããæ€çŽ¢çµæãå
šç¶éããŸãã
ããGoogleã§ã®ã¿æ€çŽ¢ããŠããå Žåã¯ãåé€å¯åŠã«äœ¿ãã®ããšæã£ãŠããŸã£ãŠããããããªãã§ããã
ããã§åé¡ãâŠâŠ
æ¬æ¥ãªãè€æ°ã® OSS ãã before_destory ãæ€çŽ¢ããããšæããŸãããã
ãã ãGitHub ã®æ€çŽ¢æ©èœã ãšããããã® OSS ããæ€çŽ¢ããªããšãããªãããããããéå¹çã§ãâŠâŠã
ãããªããšã§ãå°ãã®ããªãã«ç§ãè¡ã£ãŠããæ€çŽ¢æ¹æ³ãå ±æããããšæããŸãïŒ
è€æ°ã® OSS ãç°¡åã«æ€çŽ¢ã§ããããã«ãã
ç§ãå®éã«è¡ã£ãŠããè€æ°ã® OSS ãæ€çŽ¢ããæ¹æ³ã§ãã
VS Code ã®ã¯ãŒã¯ã¹ããŒã¹æ©èœã䜿çšããŠæ€çŽ¢ãã
ããããã¯ãŒã¯ã¹ããŒã¹ãšã¯ïŒ
å
¬åŒããã¥ã¡ã³ãã«ã¯ä»¥äžã®ããã«æžãããŠããŸãïŒ
A Visual Studio Code "workspace" is the collection of one or more folders that are opened in a VS Code window (instance). In most cases, you will have a single folder opened as the workspace but, depending on your development workflow, you can include more than one folder, using an advanced configuration called Multi-root workspaces.
åºå žïŒWhat is a VS Code "workspace"?
ãŠã£ã³ããŠã«è€æ°ã®ã«ãŒããã©ã«ããéããããã«ããæ©èœã§ãã
è€æ°ã® OSS ãã¯ãŒã¯ã¹ããŒã¹ã«è¿œå ãããšä»¥äžã®ãããªæãã«ãªããŸãã

å®éã« before_destory ãã¯ãŒã¯ã¹ããŒã¹ã§æ€çŽ¢ããŠã¿ããšä»¥äžã®ããã«ãªããŸãïŒ

è€æ°ã® OSS ããæ€çŽ¢ã§ããããã«ãªããŸããïŒ ããã§ãšãããããŸãïŒ
ã¡ãã£ãšåŸ ã£ãŠïŒ
ããŒã«ã«ã«ããããã® OSS ã git clone ããŠããŠãããã¯ãŒã¯ã¹ããŒã¹ã«èšå®ããã®ããã©ããããªãïŒ
OSS ãæŽæ°ãããã©ããããããããâŠâŠã
ãããªããšãæã£ãããã®ããªãïŒ
倧äžå€«ã§ãïŒ ãã£ãšç°¡åã«ååŸã§ããããã«ããŸãããïŒ
OSS ãç°¡åã«ååŸïŒæŽæ°ã§ããä»çµã¿ãæ§ç¯
Rails ã«é¢ããŠã¯ç§ãäœæãã rails_oss ãªããžããªã clone ããŠã㊠bash clone_and_update.bash ãå®è¡ããã ãã§ç°¡åã«ããŒã«ã«ã«æ€çŽ¢ã§ããç°å¢ãåºæ¥äžãããŸãïŒ

ãªããžããªã® clone ãš update ãçµãã£ãåŸã¯ rails_oss.code-workspace ãã¡ã€ã«ãéã cmd + shift + f ã§æ€çŽ¢ãããæåãæãŠã°æ€çŽ¢ã§ããããã«ãªããŸãïŒ
ãã®ããŒã«ã¯èšå®ããã OSS ã clone ïŒ update ãèªåã§ã¯ãŒã¯ã¹ããŒã¹ãã¡ã€ã«ãäœæããããŒã«ã«ãªããŸãïŒ
åäœããããšä»¥äžã®ãããªæãã§èªåã§ clone ãš update ãè¡ãããããã«ãªããŸãã

rails_oss ã®ä»çµã¿ã¯ïŒ
ç°¡å㪠bash ãã¡ã€ã«ã«ãªããŸãã
clone_and_update.bash ã¯ä»¥äžã®ããã«æžãããŠããŸãã
#!/bin/bash
declare -a cloneList=($(cat ./list/ssh))
echo '{
"folders": [' > rails_oss.code-workspace
for ((i = 0; i < ${#cloneList[@]}; i++)) {
project_name=$(echo "${cloneList[i]}" | cut -d '/' -f2 | sed -e 's/.git//g')
project_dir="./${project_name}"
echo ' {
"path": "'${project_name}'"
},' >> rails_oss.code-workspace
if [ ! -d $project_dir ]; then
echo $project_name clone start...
git clone ${cloneList[i]}
else
echo $project_name clone skip...
echo $project_name update
cd $project_name
git fetch
git pull
cd ../
fi
}
echo ' ],
"settings": {}
}' >> rails_oss.code-workspace
ã©ããªããšããã£ãŠãããç°¡åã«èª¬æããŸãã
clone ïŒ update ãããªããžããªã®ãªã¹ããååŸãã
./list/ssh ã«ãªããžããªã®ãªã¹ããæžãããŠããŸãã
ãªããžããªã®ãªã¹ããååŸããŸãã
declare -a cloneList=($(cat ./list/ssh))
./list/ssh ã«ã¯ä»¥äžã®ããã«ãªã¹ããèšå®ããŠããŸãã
git@github.com:forem/forem.git
git@github.com:gitlabhq/gitlabhq.git
git@github.com:huginn/huginn.git
git@github.com:postalhq/postal.git
git@github.com:tootsuite/mastodon.git
git@github.com:discourse/discourse.git
git@github.com:spree/spree.git
clone & update ãè¡ã
./list/ssh ã§ååŸãããªã¹ãåãç¹°ãè¿ãåŠçãè¡ããŸãã
ãã©ã«ããååšããŠãªããã° clone ãè¡ãããã©ã«ããååšããŠããã° update ãè¡ããŸãã
# ./list/ssh ã«è¿œå ãããªããžããªåç¹°ãè¿ã
for ((i = 0; i < ${#cloneList[@]}; i++)) {
# git@github.com:oss_name/oss_name.git ã®åœ¢åŒãããããžã§ã¯ãåãååŸ
project_name=$(echo "${cloneList[i]}" | cut -d '/' -f2 | sed -e 's/.git//g')
# ãããžã§ã¯ãã®ãã©ã«ããã¹ãååŸ
project_dir="./${project_name}"
# ãããžã§ã¯ãã®ãã£ã¬ã¯ããªãååšããã
if [ ! -d $project_dir ]; then
# ãããžã§ã¯ããååšããªãå Žå㯠git clone ãå®è¡ãã
echo $project_name clone start...
git clone ${cloneList[i]}
else
# ãããžã§ã¯ããååšããŠããå Žå㯠git fetch & git pull ãè¡ã
echo $project_name clone skip...
echo $project_name update
cd $project_name
git fetch
git pull
cd ../
fi
}
ã¯ãŒã¯ã¹ããŒã¹ãã¡ã€ã«ãèªåçæãã
äžéšèª¬æã«å¿
èŠã®ãªãç®æãçããŠããŸãã
./list/ssh ãã¡ã€ã«ã«èšèŒãããŠãã git clone çšã® URL ããã¯ãŒã¯ã¹ããŒã¹ã®ãã¡ã€ã«ãèªåçæããŸãã
ã»
ã»
ã»
echo '{
"folders": [' > rails_oss.code-workspace
ã»
ã»
ã»
for ((i = 0; i < ${#cloneList[@]}; i++)) {
ã»
ã»
ã»
echo ' {
"path": "'${project_name}'"
},' >> rails_oss.code-workspace
ã»
ã»
ã»
}
echo ' ],
"settings": {}
}' >> rails_oss.code-workspace
æ°ãã OSS ã远å ãã
æ°ãã OSS ã远å ãããå Žå㯠./list/ssh ãã¡ã€ã«ã« git clone ã® URL ã远å ããŸãã
./list/ssh ãã¡ã€ã«ã«è¿œå ããã ãã§ã¯ãŒã¯ã¹ããŒã¹ãã¡ã€ã«ãæŽæ°ãããã®ã§ç¹ã«æ°ã«ããå¿
èŠã¯ãããŸããã
æåŸã«
rails_oss ã®ä»çµã¿ã䜿çšããã° Rails 以å€ã®ãããžã§ã¯ãã«ãå¿çšãå¹ããŸãïŒ
ããŸã OSS ãèªãã ããšããªãæ¹ããã®ä»çµã¿ãå
ã« OSS ãèªãã§ã¿ãã®ã¯ãããã§ããããïŒ
ãããããããã°çããã®ããããã®ãOSSããæããŠãã ããïŒ
çŽ æµãª OSS ã©ã€ããïŒ
Discussion