{"id":1706,"date":"2025-03-24T08:50:07","date_gmt":"2025-03-23T23:50:07","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1706"},"modified":"2025-03-24T08:50:07","modified_gmt":"2025-03-23T23:50:07","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91clang-format%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%bf%e3%82%a4%e3%83%ab%e3%82%92%e5%ae%8c%e7%92%a7%e3%81%ab%e7%b5%b1","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1706","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011clang-format\u3067\u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb\u3092\u5b8c\u74a7\u306b\u7d71\u4e00\u3059\u308b7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">clang-format\u3068\u306f\uff1f\u958b\u767a\u52b9\u7387\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u306e\u5b9f\u529b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">LLVM\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u63d0\u4f9b\u3059\u308b\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30bf<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u624b\u52d5\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068\u306e\u6bd4\u8f03\u3067\u6c7a\u307e\u308b\u5727\u5012\u7684\u306a\u52b9\u7387\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">clang-format\u3092\u5c0e\u5165\u3057\u3066\u958b\u767a\u751f\u7523\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u5404\u7a2e\u74b0\u5883\u3067\u306e\u6b63\u3057\u3044\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-5\">VSCode \u3084\u305d\u306e\u4ed6\u4e3b\u8981 IDE \u3068\u306e\u9023\u643a\u8a2d\u5b9a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">CI \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3078\u306e\u7d44\u307f\u8fbc\u307f\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u5b8c\u5168\u306b\u7d71\u4e00\u3059\u308bclang-format\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u3088\u304f\u4f7f\u308f\u308c\u308b\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u305d\u306e\u610f\u5473<\/a>      <\/li>      <li>        <a href=\"#i-9\">Google \u30b9\u30bf\u30a4\u30eb\u3068LLVM \u30b9\u30bf\u30a4\u30eb\u306e\u9055\u3044\u3068\u9078\u629e<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u8a2d\u5b9a\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">\u5b9f\u8df5\u7684\u306aclang-format\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u7279\u5b9a\u306e\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5bfe\u8c61\u304b\u3089\u9664\u5916\u3059\u308b\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3059\u308b\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u5927\u898f\u6a21\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">\u958b\u767a\u30c1\u30fc\u30e0\u3067\u306eclang-format\u904b\u7528\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u30b3\u30fc\u30c9\u898f\u5b9a\u3068\u306e\u6574\u5408\u6027\u3092\u78ba\u4fdd\u3059\u308b\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-17\">\u30ec\u30d3\u30e5\u30fc\u30d7\u30ed\u30bb\u30b9\u3092\u52b9\u7387\u5316\u3059\u308b\u305f\u3081\u306e\u30d2\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">\u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u306e\u5408\u610f\u3092\u5f97\u308b\u305f\u3081\u306e\u9032\u3081\u65b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">clang-format\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-21\">\u671f\u5f85\u901a\u308a\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u306a\u3044\u5834\u5408\u306e\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u975e\u4e92\u63db\u6027\u3078\u306e\u5bfe\u5fdc\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-23\">\u3088\u308a\u826f\u3044\u30b3\u30fc\u30c9\u54c1\u8cea\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-24\">\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u3068\u306e\u7d44\u307f\u5408\u308f\u305b\u65b9<\/a>      <\/li>      <li>        <a href=\"#i-25\">\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u81ea\u52d5\u5316\u3078\u306e\u767a\u5c55\u7684\u306a\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-26\">\u7d99\u7d9a\u7684\u306a\u6539\u5584\u306e\u305f\u3081\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">clang-format\u3068\u306f\uff1f\u958b\u767a\u52b9\u7387\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u306e\u5b9f\u529b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">LLVM\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u63d0\u4f9b\u3059\u308b\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30bf<\/h3>\n\n\n\n<p>clang-format\u306f\u3001LLVM\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u958b\u767a\u3057\u305f\u9ad8\u6027\u80fd\u306a\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u3067\u3059\u3002C++\u3001C\u3001Objective-C\u3001Java\u3001JavaScript\u3001TypeScript\u3001Protocol Buffers\u306a\u3069\u3001\u591a\u69d8\u306a\u8a00\u8a9e\u306b\u5bfe\u5fdc\u3057\u3066\u304a\u308a\u3001\u7279\u306bC++\u30b3\u30fc\u30c9\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u304a\u3044\u3066\u5727\u5012\u7684\u306a\u4fe1\u983c\u6027\u3092\u8a87\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>LLVM\u306f\u3001Apple\u793e\u306eChris Lattner\u6c0f\u306b\u3088\u3063\u3066\u59cb\u3081\u3089\u308c\u305f\u3001\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3002clang-format\u306f\u3001\u3053\u306eLLVM\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4e00\u90e8\u3068\u3057\u3066\u958b\u767a\u3055\u308c\u3001\u4ee5\u4e0b\u306e\u7279\u5fb4\u3092\u6301\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8c4a\u5bcc\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3<\/strong>: \u30a4\u30f3\u30c7\u30f3\u30c8\u5e45\u3001\u62ec\u5f27\u306e\u914d\u7f6e\u3001\u6539\u884c\u30eb\u30fc\u30eb\u306a\u3069\u3001\u7d30\u304b\u306a\u8a2d\u5b9a\u304c\u53ef\u80fd<\/li>\n\n\n\n<li><strong>\u8907\u6570\u306e\u5b9a\u7fa9\u6e08\u307f\u30b9\u30bf\u30a4\u30eb<\/strong>: Google\u3001LLVM\u3001Mozilla\u3001WebKit\u306a\u3069\u3001\u6709\u540d\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u3059\u3050\u306b\u9069\u7528\u53ef\u80fd<\/li>\n\n\n\n<li><strong>\u9ad8\u901f\u306a\u51e6\u7406<\/strong>: \u5927\u898f\u6a21\u306a\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u3082\u9ad8\u901f\u306b\u52d5\u4f5c<\/li>\n\n\n\n<li><strong>IDE\u7d71\u5408<\/strong>: \u4e3b\u8981\u306aIDE\u3084\u30a8\u30c7\u30a3\u30bf\u3068\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u9023\u643a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u624b\u52d5\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068\u306e\u6bd4\u8f03\u3067\u6c7a\u307e\u308b\u5727\u5012\u7684\u306a\u52b9\u7387\u6027<\/h3>\n\n\n\n<p>\u624b\u52d5\u3067\u306e\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068\u6bd4\u8f03\u3057\u305f\u5834\u5408\u3001clang-format\u304c\u3082\u305f\u3089\u3059\u52b9\u7387\u6027\u306f\u5727\u5012\u7684\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u5177\u4f53\u4f8b\u3067\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u524d\u306e\u30b3\u30fc\u30c9\nclass MyClass{\n    public:\n    MyClass(int value):m_value(value){}\n    void setValue(int value){m_value=value;}\n    int getValue()const{return m_value;}\nprivate:\n    int m_value;\n};<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ clang-format\u3067\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5f8c\u306e\u30b3\u30fc\u30c9\nclass MyClass {\npublic:\n    MyClass(int value) : m_value(value) {}\n\n    void setValue(int value) { \n        m_value = value; \n    }\n\n    int getValue() const { \n        return m_value; \n    }\n\nprivate:\n    int m_value;\n};<\/pre>\n\n\n\n<p>\u3053\u306e\u4f8b\u304b\u3089\u308f\u304b\u308b\u4e3b\u8981\u306a\u5229\u70b9\uff1a<\/p>\n\n\n<div id=\"id-094c3113-79d1-4d71-a5f4-f76baeb7d42f\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u89b3\u70b9<\/th><th>\u624b\u52d5\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/th><th>clang-format<\/th><\/tr><\/thead><tbody><tr><td>\u51e6\u7406\u6642\u9593<\/td><td>1\u30d5\u30a1\u30a4\u30eb\u6570\u5206<\/td><td>1\u30d5\u30a1\u30a4\u30eb\u6570\u79d2<\/td><\/tr><tr><td>\u4e00\u8cab\u6027<\/td><td>\u4eba\u306b\u3088\u308b\u63fa\u308c\u3042\u308a<\/td><td>\u5b8c\u5168\u306a\u4e00\u8cab\u6027<\/td><\/tr><tr><td>\u30df\u30b9\u767a\u751f<\/td><td>\u3042\u308a<\/td><td>\u306a\u3057<\/td><\/tr><tr><td>\u30c1\u30fc\u30e0\u5185\u3067\u306e\u7d71\u4e00<\/td><td>\u56f0\u96e3<\/td><td>\u5bb9\u6613<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3055\u3089\u306b\u3001clang-format\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u3067\u5f97\u3089\u308c\u308b\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a\u306f\u4ee5\u4e0b\u306e\u70b9\u306b\u73fe\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u52b9\u7387\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30bf\u30a4\u30eb\u306e\u8b70\u8ad6\u304c\u4e0d\u8981\u306b\u306a\u308a\u3001\u30ed\u30b8\u30c3\u30af\u306e\u78ba\u8a8d\u306b\u96c6\u4e2d\u3067\u304d\u308b<\/li>\n\n\n\n<li>\u30ec\u30d3\u30e5\u30fc\u6642\u9593\u306e\u5927\u5e45\u306a\u524a\u6e1b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u8005\u306e\u8a8d\u77e5\u8ca0\u8377\u524a\u6e1b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u8003\u3048\u308b\u6642\u9593\u304c\u4e0d\u8981<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u304c\u5411\u4e0a\u3057\u3001\u30d0\u30b0\u306e\u767a\u898b\u304c\u5bb9\u6613\u306b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c1\u30fc\u30e0\u5168\u4f53\u306e\u751f\u7523\u6027\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65b0\u898f\u30e1\u30f3\u30d0\u30fc\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8\u524a\u6e1b<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u4e00\u8cab\u6027\u7dad\u6301\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001clang-format\u306f\u30b7\u30f3\u30d7\u30eb\u306a\u30c4\u30fc\u30eb\u3067\u3042\u308a\u306a\u304c\u3089\u3001\u958b\u767a\u30d7\u30ed\u30bb\u30b9\u5168\u4f53\u306b\u5927\u304d\u306a\u30e1\u30ea\u30c3\u30c8\u3092\u3082\u305f\u3089\u3057\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001\u8907\u6570\u306e\u958b\u767a\u8005\u304c\u95a2\u308f\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u305d\u306e\u52b9\u679c\u306f\u9855\u8457\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">clang-format\u3092\u5c0e\u5165\u3057\u3066\u958b\u767a\u751f\u7523\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u5404\u7a2e\u74b0\u5883\u3067\u306e\u6b63\u3057\u3044\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u5404\u4e3b\u8981OS\u3067\u306eclang-format\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>Ubuntu\/Debian\u7cfb<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u65b0\u7248\u306eclang-format\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nsudo apt update\nsudo apt install clang-format\n\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\nclang-format --version<\/pre>\n\n\n\n<p><strong>macOS (Homebrew)<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Homebrew\u3092\u4f7f\u7528\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nbrew install clang-format\n\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\nclang-format --version<\/pre>\n\n\n\n<p><strong>Windows<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>LLVM\u516c\u5f0f\u30b5\u30a4\u30c8\u304b\u3089\u6700\u65b0\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u300cAdd LLVM to the system PATH\u300d\u306b\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u3067\u52d5\u4f5c\u78ba\u8a8d\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">clang-format --version<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">VSCode \u3084\u305d\u306e\u4ed6\u4e3b\u8981 IDE \u3068\u306e\u9023\u643a\u8a2d\u5b9a<\/h3>\n\n\n\n<p><strong>Visual Studio Code<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u62e1\u5f35\u6a5f\u80fd\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u300cClang-Format\u300d\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n\n\n\n<li>\u307e\u305f\u306f\u300cC\/C++\u300d\u62e1\u5f35\u6a5f\u80fd\u306b\u542b\u307e\u308c\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u3092\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>settings.json\u3067\u306e\u8a2d\u5b9a\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"C_Cpp.clang_format_path\": \"clang-format\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30d1\u30b9\",\n    \"C_Cpp.clang_format_style\": \"file\",\n    \"editor.defaultFormatter\": \"ms-vscode.cpptools\",\n    \"editor.formatOnSave\": true,\n    \"[cpp]\": {\n        \"editor.defaultFormatter\": \"ms-vscode.cpptools\"\n    }\n}<\/pre>\n\n\n\n<p><strong>Visual Studio<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7d44\u307f\u8fbc\u307f\u306eclang-format\u30b5\u30dd\u30fc\u30c8\u3092\u6709\u52b9\u5316\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c4\u30fc\u30eb \u2192 \u30aa\u30d7\u30b7\u30e7\u30f3 \u2192 \u30c6\u30ad\u30b9\u30c8\u30a8\u30c7\u30a3\u30bf\u30fc \u2192 C\/C++ \u2192 \u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb<\/li>\n\n\n\n<li>\u300cClang\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u300d\u3092\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>.clang-format\u30d5\u30a1\u30a4\u30eb\u306e\u914d\u7f6e\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u914d\u7f6e<\/li>\n\n\n\n<li>\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u30d5\u30a9\u30eb\u30c0\u306b\u914d\u7f6e<\/li>\n<\/ul>\n\n\n\n<p><strong>CLion<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8a2d\u5b9a\u753b\u9762\u3092\u958b\u304f\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Settings\/Preferences \u2192 Editor \u2192 Code Style<\/li>\n\n\n\n<li>Enable ClangFormat support \u306b\u30c1\u30a7\u30c3\u30af<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b9\u30bf\u30a4\u30eb\u8a2d\u5b9a\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Current formatter: ClangFormat \u3092\u9078\u629e<\/li>\n\n\n\n<li>Style: file \u3092\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">CI \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3078\u306e\u7d44\u307f\u8fbc\u307f\u65b9\u6cd5<\/h3>\n\n\n\n<p><strong>GitHub Actions \u3067\u306e\u4f8b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">name: Clang Format Check\n\non: [push, pull_request]\n\njobs:\n  format-check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\/checkout@v2\n\n      - name: Install clang-format\n        run: sudo apt-get install -y clang-format\n\n      - name: Check formatting\n        run: |\n          find . -regex '.*\\.\\(cpp\\|hpp\\|cc\\|cxx\\)' -exec clang-format -style=file -i {} \\;\n          git diff --exit-code<\/pre>\n\n\n\n<p><strong>GitLab CI \u3067\u306e\u4f8b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">clang-format:\n  stage: lint\n  image: ubuntu:latest\n  before_script:\n    - apt-get update &amp;&amp; apt-get install -y clang-format git\n  script:\n    - find . -regex '.*\\.\\(cpp\\|hpp\\|cc\\|cxx\\)' -exec clang-format -style=file -i {} \\;\n    - git diff --exit-code<\/pre>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u4f8b\u3068\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3068\u4fbf\u5229\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n# format-check.sh\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u5168C++\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30c1\u30a7\u30c3\u30af\n\n# \u30a8\u30e9\u30fc\u6642\u306b\u4e2d\u65ad\nset -e\n\n# \u5909\u66f4\u306e\u3042\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30c1\u30a7\u30c3\u30af\ngit diff --name-only HEAD | grep -E '\\.(cpp|hpp|cc|h)$' | while read -r file; do\n    if [ -f \"$file\" ]; then\n        clang-format -style=file -i \"$file\"\n    fi\ndone\n\n# \u5909\u66f4\u304c\u3042\u308c\u3070\u30a8\u30e9\u30fc\ngit diff --exit-code || {\n    echo \"\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30a8\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\"\n    echo \"clang-format\u3092\u5b9f\u884c\u3057\u3066\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002\"\n    exit 1\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092git pre-commit\u30d5\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30df\u30c3\u30c8\u524d\u306b\u81ea\u52d5\u7684\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u5c0e\u5165\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u81ea\u52d5\u5316\u3055\u308c\u305f\u4e00\u8cab\u3057\u305f\u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb<\/li>\n\n\n\n<li>\u30ec\u30d3\u30e5\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u52b9\u7387\u5316<\/li>\n\n\n\n<li>CI\u30d7\u30ed\u30bb\u30b9\u3067\u306e\u65e9\u671f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30a8\u30e9\u30fc\u306e\u691c\u51fa<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u7d71\u4e00\u3055\u308c\u305f\u958b\u767a\u74b0\u5883<\/li>\n<\/ol>\n\n\n\n<p>\u5404\u958b\u767a\u8005\u306e\u74b0\u5883\u306b\u5408\u308f\u305b\u3066\u9069\u5207\u306a\u8a2d\u5b9a\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u30b9\u30e0\u30fc\u30ba\u306a\u958b\u767a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u5b8c\u5168\u306b\u7d71\u4e00\u3059\u308bclang-format\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u3088\u304f\u4f7f\u308f\u308c\u308b\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u305d\u306e\u610f\u5473<\/h3>\n\n\n\n<p>clang-format\u306e\u8a2d\u5b9a\u306f<code>.clang-format<\/code>\u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u4e3b\u8981\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u89e3\u8aac\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>\u57fa\u672c\u7684\u306a\u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a4\u30f3\u30c7\u30f3\u30c8\u30b9\u30bf\u30a4\u30eb\nIndentWidth: 4                    # \u30a4\u30f3\u30c7\u30f3\u30c8\u5e45\nUseTab: false                     # \u30bf\u30d6\u306e\u4ee3\u308f\u308a\u306b\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u7528\nColumnLimit: 100                  # 1\u884c\u306e\u6700\u5927\u6587\u5b57\u6570\n\n# \u6539\u884c\u3068\u30b9\u30da\u30fc\u30b9\nBreakBeforeBraces: Attach        # \u6ce2\u62ec\u5f27\u306e\u4f4d\u7f6e\nSpaceBeforeParens: ControlStatements  # \u5236\u5fa1\u6587\u306e\u62ec\u5f27\u524d\u306e\u30b9\u30da\u30fc\u30b9\nAllowShortFunctionsOnASingleLine: None  # \u77ed\u3044\u95a2\u6570\u306e1\u884c\u8a18\u8ff0\n\n# \u30af\u30e9\u30b9\u3068\u95a2\u6570\nAccessModifierOffset: -4          # \u30a2\u30af\u30bb\u30b9\u4fee\u98fe\u5b50\u306e\u30a4\u30f3\u30c7\u30f3\u30c8\nConstructorInitializerIndentWidth: 4  # \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u521d\u671f\u5316\u5b50\u306e\u30a4\u30f3\u30c7\u30f3\u30c8<\/pre>\n\n\n\n<p>\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u306e\u30b5\u30f3\u30d7\u30eb\u5024\u3068\u52b9\u679c\uff1a<\/p>\n\n\n<div id=\"id-a969c74a-222b-4d87-939f-5be28f114b73\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8a2d\u5b9a\u9805\u76ee<\/th><th>\u5024<\/th><th>\u52b9\u679c<\/th><\/tr><\/thead><tbody><tr><td>IndentWidth<\/td><td>2-4<\/td><td>\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u306e\u30a4\u30f3\u30c7\u30f3\u30c8\u5e45<\/td><\/tr><tr><td>ColumnLimit<\/td><td>80-120<\/td><td>1\u884c\u306e\u6700\u5927\u9577<\/td><\/tr><tr><td>NamespaceIndentation<\/td><td>None\/Inner<\/td><td>\u540d\u524d\u7a7a\u9593\u306e\u30a4\u30f3\u30c7\u30f3\u30c8\u65b9\u6cd5<\/td><\/tr><tr><td>PointerAlignment<\/td><td>Left\/Right<\/td><td>\u30dd\u30a4\u30f3\u30bf\u306e<code>*<\/code>\u306e\u4f4d\u7f6e<\/td><\/tr><tr><td>AlignConsecutiveAssignments<\/td><td>true\/false<\/td><td>\u9023\u7d9a\u3059\u308b\u4ee3\u5165\u306e\u4f4d\u7f6e\u63c3\u3048<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">Google \u30b9\u30bf\u30a4\u30eb\u3068LLVM \u30b9\u30bf\u30a4\u30eb\u306e\u9055\u3044\u3068\u9078\u629e<\/h3>\n\n\n\n<p>\u4e3b\u8981\u306a\u30d7\u30ea\u30bb\u30c3\u30c8\u30b9\u30bf\u30a4\u30eb\u306e\u6bd4\u8f03\uff1a<\/p>\n\n\n\n<p><strong>Google\u30b9\u30bf\u30a4\u30eb<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">BasedOnStyle: Google\n# \u4e3b\u306a\u7279\u5fb4\nAccessModifierOffset: -1\nAllowShortIfStatementsOnASingleLine: true\nBreakBeforeBraces: Attach\nColumnLimit: 80\nDerivePointerAlignment: true\nIndentWidth: 2<\/pre>\n\n\n\n<p><strong>LLVM\u30b9\u30bf\u30a4\u30eb<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">BasedOnStyle: LLVM\n# \u4e3b\u306a\u7279\u5fb4\nAccessModifierOffset: -2\nAllowShortIfStatementsOnASingleLine: false\nBreakBeforeBraces: Attach\nColumnLimit: 100\nDerivePointerAlignment: false\nIndentWidth: 4<\/pre>\n\n\n\n<p>\u30b9\u30bf\u30a4\u30eb\u9078\u629e\u306e\u5224\u65ad\u57fa\u6e96\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Google\u30b9\u30bf\u30a4\u30eb\u5411\u304d<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/li>\n\n\n\n<li>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30af\u30c8\u306a\u30b3\u30fc\u30c9\u3092\u597d\u3080\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>LLVM\u30b9\u30bf\u30a4\u30eb\u5411\u304d<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30b9\u30c6\u30e0\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0<\/li>\n\n\n\n<li>\u53ef\u8aad\u6027\u91cd\u8996\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/li>\n\n\n\n<li>\u5f93\u6765\u306eC++\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04\u306b\u8fd1\u3044\u30b9\u30bf\u30a4\u30eb\u3092\u671b\u3080\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u8a2d\u5b9a\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u8a2d\u5b9a\u304b\u3089\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u4f8b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d9\u30fc\u30b9\u30b9\u30bf\u30a4\u30eb\u306e\u9078\u629e\nBasedOnStyle: Google\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u56fa\u6709\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\nIndentWidth: 4\nColumnLimit: 120\nAlignConsecutiveAssignments: true\nAlignConsecutiveDeclarations: true\n\n# \u7279\u5b9a\u306e\u8a00\u8a9e\u5411\u3051\u306e\u8a2d\u5b9a\nLanguage: Cpp\nStandard: Latest<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5236\u5fa1<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u914d\u5217\u306e\u6574\u5f62\nAlignArrayOfStructures: Right\nBinPackArguments: false\nBinPackParameters: false\n\n# \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u6574\u5f62\nAlwaysBreakTemplateDeclarations: Yes\nSpaceAfterTemplateKeyword: true\n\n# \u30de\u30af\u30ed\u306e\u6574\u5f62\nAlignConsecutiveMacros: AcrossEmptyLines\nIndentPPDirectives: AfterHash<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u6761\u4ef6\u4ed8\u304d\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d8\u30c3\u30c0\u30fc\u30d5\u30a1\u30a4\u30eb\u7528\u306e\u8a2d\u5b9a\n---\nLanguage: Cpp\nStandard: Latest\nIncludeCategories:\n  - Regex: '^\"[[:alnum:].\/]+\"$'\n    Priority: 1\n  - Regex: '^&lt;[[:alnum:].\/]+&gt;$'\n    Priority: 2\n\n# \u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u7528\u306e\u8a2d\u5b9a\n---\nLanguage: Cpp\nStandard: Latest\nColumnLimit: 100<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u8a2d\u5b9a\u5c0e\u5165<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u307e\u305a\u57fa\u672c\u7684\u306a\u8a2d\u5b9a\u304b\u3089\u59cb\u3081\u308b<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u306e\u53cd\u5fdc\u3092\u898b\u306a\u304c\u3089\u5f90\u3005\u306b\u8a73\u7d30\u306a\u8a2d\u5b9a\u3092\u8ffd\u52a0<\/li>\n\n\n\n<li>\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u8a2d\u5b9a\u3092\u898b\u76f4\u3059<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u914d\u7f6e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u306b<code>.clang-format<\/code>\u3092\u914d\u7f6e<\/li>\n\n\n\n<li>\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3054\u3068\u306b\u500b\u5225\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3092\u5fd8\u308c\u305a\u306b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a2d\u5b9a\u306e\u691c\u8a3c\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u8a2d\u5b9a\u306e\u9069\u7528\u7d50\u679c\u3092\u78ba\u8a8d\uff08\u5b9f\u969b\u306b\u306f\u5909\u66f4\u3092\u52a0\u3048\u306a\u3044\uff09\nclang-format -style=file --dump-config\n\n# \u7279\u5b9a\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u5bfe\u3059\u308b\u52b9\u679c\u3092\u78ba\u8a8d\nclang-format -style=file --dry-run file.cpp<\/pre>\n\n\n\n<p>\u3053\u306e\u8a2d\u5b9a\u306b\u3088\u308a\u3001\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u4e00\u8cab\u3057\u305f\u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb\u3092\u7dad\u6301\u3057\u3064\u3064\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7279\u6027\u306b\u5408\u308f\u305b\u305f\u67d4\u8edf\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">\u5b9f\u8df5\u7684\u306aclang-format\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u7279\u5b9a\u306e\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5bfe\u8c61\u304b\u3089\u9664\u5916\u3059\u308b\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u5185\u3067\u7279\u5b9a\u306e\u90e8\u5206\u3092clang-format\u306e\u5bfe\u8c61\u304b\u3089\u9664\u5916\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u4e3b\u8981\u306a\u9664\u5916\u30c6\u30af\u30cb\u30c3\u30af\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>1. \u5358\u4e00\u884c\u306e\u9664\u5916<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ clang-format off\nmatrix[0][0] = 1; matrix[0][1] = 0; matrix[0][2] = 0;\nmatrix[1][0] = 0; matrix[1][1] = 1; matrix[1][2] = 0;\nmatrix[2][0] = 0; matrix[2][1] = 0; matrix[2][2] = 1;\n\/\/ clang-format on<\/pre>\n\n\n\n<p><strong>2. \u7279\u5b9a\u306e\u30d6\u30ed\u30c3\u30af\u306e\u9664\u5916<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void complexAlignment() {\n    \/\/ clang-format off\n    struct {\n        int         x;    \/\/ \u4f4d\u7f6e\n        const char* name; \/\/ \u8b58\u5225\u5b50\n        double      val;  \/\/ \u5024\n    } aligned_data[] = {\n        {   1, \"first\" ,  1.1 },\n        {  22, \"second\",  2.2 },\n        { 333, \"third\" ,  3.3 }\n    };\n    \/\/ clang-format on\n}<\/pre>\n\n\n\n<p><strong>3. \u30d7\u30e9\u30b0\u30de\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u4f7f\u7528\u3057\u305f\u9664\u5916<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#pragma clang format off\ntemplate&lt;typename T&gt;\nclass ComplexTemplate {\n    \/\/ \u7279\u6b8a\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u7dad\u6301\u3057\u305f\u3044\u30b3\u30fc\u30c9\n};\n#pragma clang format on<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3059\u308b\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u6bb5\u968e\u7684\u306a\u5c0e\u5165\u8a08\u753b\u306e\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6e96\u5099\u30d5\u30a7\u30fc\u30ba<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u73fe\u5728\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u72b6\u614b\u3092\u78ba\u8a8d\nfind . -name \"*.cpp\" -o -name \"*.hpp\" | xargs clang-format -style=google -i --dry-run<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30a4\u30ed\u30c3\u30c8\u5c0e\u5165<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u7279\u5b9a\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u307f\u306b\u9069\u7528\nfor file in src\/feature\/*\/*.{cpp,hpp}; do\n    clang-format -style=file -i \"$file\"\n    git diff --name-only \"$file\"  # \u5909\u66f4\u3092\u78ba\u8a8d\ndone<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u8a08\u753b<\/strong><\/li>\n<\/ol>\n\n\n<div id=\"id-1786613c-f047-4061-83d7-1d9d44d8662b\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30a7\u30fc\u30ba<\/th><th>\u5bfe\u8c61<\/th><th>\u671f\u9593<\/th><th>\u78ba\u8a8d\u9805\u76ee<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>\u65b0\u898f\u30d5\u30a1\u30a4\u30eb<\/td><td>1\u9031\u9593<\/td><td>\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc<\/td><\/tr><tr><td>2<\/td><td>\u6d3b\u767a\u306b\u958b\u767a\u4e2d\u306e\u30e2\u30b8\u30e5\u30fc\u30eb<\/td><td>2\u9031\u9593<\/td><td>\u30ec\u30d3\u30e5\u30fc\u52b9\u7387<\/td><\/tr><tr><td>3<\/td><td>\u5b89\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb<\/td><td>1\u30f6\u6708<\/td><td>\u526f\u4f5c\u7528<\/td><\/tr><tr><td>4<\/td><td>\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9<\/td><td>2\u30f6\u6708<\/td><td>\u4e92\u63db\u6027<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u5927\u898f\u6a21\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># GNU Parallel\u3092\u4f7f\u7528\u3057\u305f\u4e26\u5217\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\nfind . -name \"*.cpp\" -o -name \"*.hpp\" | \\\n    parallel --bar clang-format -style=file -i {}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5897\u5206\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n# \u5909\u66f4\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\ngit diff --name-only HEAD | grep -E '\\.(cpp|hpp)$' | while read file; do\n    if [ -f \"$file\" ]; then\n        clang-format -style=file -i \"$file\"\n    fi\ndone<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\nexport CLANG_FORMAT_CACHE_DIR=.format-cache\nmkdir -p $CLANG_FORMAT_CACHE_DIR\n\nformat_file() {\n    local file=$1\n    local hash=$(md5sum \"$file\" | cut -d' ' -f1)\n    local cache_file=\"$CLANG_FORMAT_CACHE_DIR\/$hash\"\n\n    if [ ! -f \"$cache_file\" ]; then\n        clang-format -style=file -i \"$file\"\n        cp \"$file\" \"$cache_file\"\n    else\n        cp \"$cache_file\" \"$file\"\n    fi\n}<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306b\u3088\u308b\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306f\u5225\u9014\u51e6\u7406\nfind . -type f -size +1M \\( -name \"*.cpp\" -o -name \"*.hpp\" \\) -exec \\\n    bash -c 'echo \"Large file: {}\"; clang-format -style=file -i \"{}\"' \\;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5236\u5fa1<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u5236\u9650\u3057\u306a\u304c\u3089\u5b9f\u884c\nulimit -v 4000000  # 4GB\u5236\u9650\nfind . -name \"*.cpp\" -o -name \"*.hpp\" | \\\n    xargs -P $(nproc) -n 1 clang-format -style=file -i<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306e\u52b9\u7387\u7684\u306a\u5b9f\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># GitLab CI\u8a2d\u5b9a\u4f8b\nformat-check:\n  script:\n    - |\n      if [ \"$CI_MERGE_REQUEST_ID\" ]; then\n        # MR\u306e\u5909\u66f4\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u30c1\u30a7\u30c3\u30af\n        changes=$(git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA)\n        echo \"$changes\" | grep -E '\\.(cpp|hpp)$' | \\\n          xargs -r clang-format -style=file -i\n      else\n        # \u5168\u30d5\u30a1\u30a4\u30eb\u3092\u30c1\u30a7\u30c3\u30af\uff08\u5b9a\u671f\u5b9f\u884c\u6642\uff09\n        find . -name \"*.cpp\" -o -name \"*.hpp\" | \\\n          xargs clang-format -style=file -i\n      fi<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6280\u8853\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3082\u52b9\u7387\u7684\u306a\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u958b\u767a\u30c1\u30fc\u30e0\u3067\u306eclang-format\u904b\u7528\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30b3\u30fc\u30c9\u898f\u5b9a\u3068\u306e\u6574\u5408\u6027\u3092\u78ba\u4fdd\u3059\u308b\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u52b9\u679c\u7684\u306a\u30b3\u30fc\u30c9\u898f\u7d04\u3068\u306e\u7d71\u5408\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u65e2\u5b58\u306e\u30b3\u30fc\u30c9\u898f\u7d04\u3068\u306e\u6574\u5408\u6027\u30c1\u30a7\u30c3\u30af<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .clang-format\n# \u793e\u5185\u30b3\u30fc\u30c9\u898f\u7d04\u306b\u5408\u308f\u305b\u305f\u8a2d\u5b9a\u4f8b\nBasedOnStyle: Google\nIndentWidth: 4\nColumnLimit: 120\nNamespaceIndentation: Inner\nAccessModifierOffset: -4\nBreakBeforeBraces: Custom\nBraceWrapping:\n  AfterClass: true\n  AfterFunction: true\n  AfterNamespace: false<\/pre>\n\n\n\n<p>\u30b3\u30fc\u30c9\u898f\u7d04\u3068\u306e\u6574\u5408\u6027\u78ba\u4fdd\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n<div id=\"id-0d2478da-af6f-4c03-be5a-0cd0949551aa\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u78ba\u8a8d\u9805\u76ee<\/th><th>\u5bfe\u5fdc\u65b9\u6cd5<\/th><th>\u91cd\u8981\u5ea6<\/th><\/tr><\/thead><tbody><tr><td>\u30a4\u30f3\u30c7\u30f3\u30c8\u30eb\u30fc\u30eb<\/td><td>IndentWidth\u3067\u8a2d\u5b9a<\/td><td>\u9ad8<\/td><\/tr><tr><td>\u547d\u540d\u898f\u5247<\/td><td>\u81ea\u52d5\u9069\u7528\u5916\u3068\u3057\u3066\u6587\u66f8\u5316<\/td><td>\u4e2d<\/td><\/tr><tr><td>\u30b3\u30e1\u30f3\u30c8\u30b9\u30bf\u30a4\u30eb<\/td><td>CommentPragmas\u3067\u5236\u5fa1<\/td><td>\u4e2d<\/td><\/tr><tr><td>\u62ec\u5f27\u306e\u914d\u7f6e<\/td><td>BraceWrapping\u3067\u8a2d\u5b9a<\/td><td>\u9ad8<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30ec\u30d3\u30e5\u30fc\u30d7\u30ed\u30bb\u30b9\u3092\u52b9\u7387\u5316\u3059\u308b\u305f\u3081\u306e\u30d2\u30f3\u30c8<\/h3>\n\n\n\n<p><strong>1. \u81ea\u52d5\u30ec\u30d3\u30e5\u30fc\u306e\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .github\/workflows\/code-review.yml\nname: Code Review\non: [pull_request]\njobs:\n  format-check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\/checkout@v2\n      - name: Format Check\n        run: |\n          clang-format --version\n          git diff -U0 --no-color HEAD^ | \\\n          clang-format-diff -p1 -i<\/pre>\n\n\n\n<p><strong>2. \u30ec\u30d3\u30e5\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u9069\u5316<\/strong><\/p>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30ec\u30d3\u30e5\u30fc\u306e\u305f\u3081\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pre-commit hooks \u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n# .git\/hooks\/pre-commit\nFILES=$(git diff --cached --name-only --diff-filter=ACMR | grep -E \"\\.(cpp|hpp)$\")\nif [ -n \"$FILES\" ]; then\n    clang-format -i $FILES\n    git add $FILES\nfi<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ec\u30d3\u30e5\u30fc\u30b3\u30e1\u30f3\u30c8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u6e96\u5099<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">## \u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\n- [ ] clang-format\u304c\u9069\u7528\u3055\u308c\u3066\u3044\u308b\u304b\n- [ ] \u9664\u5916\u3059\u3079\u304d\u30d6\u30ed\u30c3\u30af\u304c\u9069\u5207\u306b\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\u304b\n- [ ] \u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u304c\u6587\u66f8\u5316\u3055\u308c\u3066\u3044\u308b\u304b<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u306e\u5408\u610f\u3092\u5f97\u308b\u305f\u3081\u306e\u9032\u3081\u65b9<\/h3>\n\n\n\n<p><strong>1. \u6bb5\u968e\u7684\u306a\u5c0e\u5165\u30d7\u30ed\u30bb\u30b9<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6e96\u5099\u30d5\u30a7\u30fc\u30ba<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c1\u30fc\u30e0\u5185\u3067\u306e\u8aac\u660e\u4f1a\u5b9f\u65bd<\/li>\n\n\n\n<li>\u8a66\u9a13\u7684\u306a\u9069\u7528\u671f\u9593\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u53ce\u96c6\u306e\u4ed5\u7d44\u307f\u69cb\u7bc9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d1\u30a4\u30ed\u30c3\u30c8\u30d5\u30a7\u30fc\u30ba<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c0f\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u8a66\u9a13\u904b\u7528<\/li>\n\n\n\n<li>\u554f\u984c\u70b9\u306e\u6d17\u3044\u51fa\u3057\u3068\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u306e\u5fae\u8abf\u6574<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u672c\u683c\u5c0e\u5165\u30d5\u30a7\u30fc\u30ba<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5168\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u5c55\u958b<\/li>\n\n\n\n<li>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u6574\u5099<\/li>\n<\/ul>\n\n\n\n<p><strong>2. \u5408\u610f\u5f62\u6210\u306e\u305f\u3081\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u6226\u7565<\/strong><\/p>\n\n\n\n<p>\u30c1\u30fc\u30e0\u5185\u3067\u306e\u52b9\u679c\u7684\u306a\u5c0e\u5165\u306e\u305f\u3081\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u660e\u78ba\u306a\u30e1\u30ea\u30c3\u30c8\u306e\u63d0\u793a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ec\u30d3\u30e5\u30fc\u5de5\u6570\u306e\u524a\u6e1b\u52b9\u679c\u306e\u6570\u5024\u5316<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u54c1\u8cea\u306e\u5411\u4e0a\u4e8b\u4f8b\u306e\u5171\u6709<\/li>\n\n\n\n<li>\u958b\u767a\u52b9\u7387\u5316\u306e\u5177\u4f53\u4f8b\u63d0\u793a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u61f8\u5ff5\u4e8b\u9805\u3078\u306e\u5bfe\u5fdc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u3088\u304f\u3042\u308b\u61f8\u5ff5\u3068\u5bfe\u5fdc\u7b56\n\n   Q: \u65e2\u5b58\u30b3\u30fc\u30c9\u3078\u306e\u5f71\u97ff\u306f\uff1f\n   A: \u6bb5\u968e\u7684\u306a\u9069\u7528\u3067\u5f71\u97ff\u3092\u6700\u5c0f\u5316\n\n   Q: \u500b\u4eba\u306e\u597d\u307f\u306f\u53cd\u6620\u3067\u304d\u308b\uff1f\n   A: \u7279\u5b9a\u30d6\u30ed\u30c3\u30af\u306e\u9664\u5916\u6a5f\u80fd\u3067\u5bfe\u5fdc\u53ef\n\n   Q: \u5b66\u7fd2\u30b3\u30b9\u30c8\u306f\uff1f\n   A: \u81ea\u52d5\u5316\u306b\u3088\u308a\u6700\u5c0f\u9650\u306b\u6291\u5236<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5b9a\u671f\u7684\u306a\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9031\u6b21\u30ec\u30d3\u30e5\u30fc\u4f1a\u8b70\u3067\u306e\u8b70\u984c\u5316<\/li>\n\n\n\n<li>\u30a2\u30f3\u30b1\u30fc\u30c8\u306b\u3088\u308b\u6e80\u8db3\u5ea6\u8abf\u67fb<\/li>\n\n\n\n<li>\u6539\u5584\u63d0\u6848\u306e\u53ce\u96c6\u3068\u53cd\u6620<\/li>\n<\/ul>\n\n\n\n<p><strong>\u904b\u7528\u6210\u529f\u306e\u305f\u3081\u306e\u5177\u4f53\u7684\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u30d7\u30e9\u30f3<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6574\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ed\u30b8\u30a7\u30af\u30c8wiki\n## clang-format\u904b\u7528\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\n1. \u76ee\u7684\u3068\u671f\u5f85\u52b9\u679c\n2. \u8a2d\u5b9a\u65b9\u6cd5\u3068\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\n3. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\n4. Q&amp;A\u96c6<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u4f53\u5236<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30df\u30c3\u30c8\u6642\u306e\u81ea\u52d5\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u9031\u6b21\u306e\u6e96\u62e0\u7387\u30ec\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u6708\u6b21\u306e\u52b9\u679c\u6e2c\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u56db\u534a\u671f\u3054\u3068\u306e\u8a2d\u5b9a\u898b\u76f4\u3057<\/li>\n\n\n\n<li>\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u66f4\u65b0<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u7814\u4fee\u306e\u5b9f\u65bd<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65bd\u7b56\u306b\u3088\u308a\u3001\u30c1\u30fc\u30e0\u5168\u4f53\u3067clang-format\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3057\u3001\u30b3\u30fc\u30c9\u54c1\u8cea\u3068\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">clang-format\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<p><strong>1. \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u95a2\u9023\u306e\u554f\u984c<\/strong><\/p>\n\n\n<div id=\"id-32765d55-ffd5-4815-8dbd-2cf7025ac05e\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u5185\u5bb9<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td><code>command not found: clang-format<\/code><\/td><td>\u30d1\u30b9\u304c\u901a\u3063\u3066\u3044\u306a\u3044<\/td><td>\u74b0\u5883\u5909\u6570PATH\u306e\u78ba\u8a8d\u3068\u8a2d\u5b9a<\/td><\/tr><tr><td><code>cannot find clang-format binary<\/code><\/td><td>VSCode\u62e1\u5f35\u6a5f\u80fd\u306e\u8a2d\u5b9a\u30df\u30b9<\/td><td>settings.json\u3067\u30d1\u30b9\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a<\/td><\/tr><tr><td><code>incompatible version<\/code><\/td><td>\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e0d\u4e00\u81f4<\/td><td>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u63a8\u5968\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5177\u4f53\u7684\u306a\u89e3\u6c7a\u624b\u9806\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d1\u30b9\u306e\u78ba\u8a8d\nwhich clang-format\n\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\nclang-format --version\n\n# \u7279\u5b9a\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08Ubuntu\uff09\nsudo apt-get install clang-format-&lt;version&gt;\n\n# \u4ee3\u66ff\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8a2d\u5b9a\uff08alternatives\uff09\nsudo update-alternatives --install \/usr\/bin\/clang-format clang-format \/usr\/bin\/clang-format-&lt;version&gt; 100<\/pre>\n\n\n\n<p><strong>2. \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u95a2\u9023\u306e\u30c8\u30e9\u30d6\u30eb<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u554f\u984c\u306e\u3042\u308b.clang-format\u8a2d\u5b9a\n# \u30a8\u30e9\u30fc: Invalid value for BasedOnStyle\nBasedOnStyle: MyCustomStyle  # \u274c\n\n# \u6b63\u3057\u3044\u8a2d\u5b9a\nBasedOnStyle: Google  # \u2705<\/pre>\n\n\n\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u8a2d\u5b9a\u306e\u691c\u8a3c\nclang-format --dump-config &gt; current-config.yaml\n\n# \u7279\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u5bfe\u3059\u308b\u8a2d\u5b9a\u306e\u78ba\u8a8d\nclang-format -style=file --dump-config file.cpp<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u671f\u5f85\u901a\u308a\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u306a\u3044\u5834\u5408\u306e\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<p><strong>1. \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u554f\u984c\u8a3a\u65ad<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u4f8b\uff1a\u30de\u30af\u30ed\u306e\u6574\u5f62\u304c\u5d29\u308c\u308b\n#define COMPLEX_MACRO(x, y) \\\n    do { \\\n        something(); \\\n        something_else(); \\\n    } while(0)\n\n\/\/ \u89e3\u6c7a\u7b56\uff1a\u30de\u30af\u30ed\u30d6\u30ed\u30c3\u30af\u306e\u9664\u5916\n\/\/ clang-format off\n#define COMPLEX_MACRO(x, y) \\\n    do { \\\n        something(); \\\n        something_else(); \\\n    } while(0)\n\/\/ clang-format on<\/pre>\n\n\n\n<p>\u8a3a\u65ad\u624b\u9806\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u554f\u984c\u306e\u5207\u308a\u5206\u3051<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u90e8\u5206\u7684\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u554f\u984c\u7b87\u6240\u3092\u7279\u5b9a\nclang-format -style=file -i --lines=10:20 file.cpp<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8a2d\u5b9a\u5024\u306e\u5f71\u97ff\u78ba\u8a8d<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u8a2d\u5b9a\u30921\u3064\u305a\u3064\u5909\u66f4\u3057\u3066\u5f71\u97ff\u3092\u78ba\u8a8d\nclang-format -style=\"{BasedOnStyle: Google, ColumnLimit: 100}\" file.cpp<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u9055\u3044\u30c1\u30a7\u30c3\u30af<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u7570\u306a\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u7d50\u679c\u6bd4\u8f03\nclang-format-10 file.cpp &gt; format-10.cpp\nclang-format-11 file.cpp &gt; format-11.cpp\ndiff format-10.cpp format-11.cpp<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u975e\u4e92\u63db\u6027\u3078\u306e\u5bfe\u5fdc\u65b9\u6cd5<\/h3>\n\n\n\n<p><strong>1. \u30d0\u30fc\u30b8\u30e7\u30f3\u56fa\u5b9a\u306e\u65b9\u6cd5<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ VSCode settings.json\n{\n    \"clangFormat.executable\": \"\/usr\/bin\/clang-format-10\",\n    \"clangFormat.fallbackStyle\": \"none\"\n}<\/pre>\n\n\n\n<p><strong>2. CI\/CD\u3067\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># GitHub Actions\njobs:\n  format:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\/checkout@v2\n      - name: Install specific version\n        run: |\n          wget -O - https:\/\/apt.llvm.org\/llvm-snapshot.gpg.key | sudo apt-key add -\n          sudo apt-add-repository \"deb http:\/\/apt.llvm.org\/focal\/ llvm-toolchain-focal-10 main\"\n          sudo apt-get update\n          sudo apt-get install -y clang-format-10<\/pre>\n\n\n\n<p>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b7\u30b9\u30c6\u30de\u30c6\u30a3\u30c3\u30af\u306a\u554f\u984c\u89e3\u6c7a\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u554f\u984c\u306e\u6b63\u78ba\u306a\u8a18\u9332<\/li>\n\n\n\n<li>\u518d\u73fe\u624b\u9806\u306e\u6587\u66f8\u5316<\/li>\n\n\n\n<li>\u89e3\u6c7a\u7b56\u306e\u691c\u8a3c\u3068\u5171\u6709<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u7528\u30b9\u30af\u30ea\u30d7\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n# format-debug.sh\necho \"Checking clang-format installation...\"\nwhich clang-format\nclang-format --version\n\necho \"Validating .clang-format...\"\nclang-format --dump-config\n\necho \"Testing format on sample file...\"\ncat &gt; test.cpp &lt;&lt; EOF\nint main() {\n    return 0;\n}\nEOF\nclang-format -i test.cpp<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c8\u30e9\u30d6\u30eb\u5831\u544a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">## \u554f\u984c\u5831\u544a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n\n### \u74b0\u5883\u60c5\u5831\n- OS: \n- clang-format\u30d0\u30fc\u30b8\u30e7\u30f3:\n- IDE\/\u30a8\u30c7\u30a3\u30bf:\n\n### \u554f\u984c\u306e\u5185\u5bb9\n- \u767a\u751f\u72b6\u6cc1:\n- \u671f\u5f85\u52d5\u4f5c:\n- \u5b9f\u969b\u306e\u52d5\u4f5c:\n\n### \u518d\u73fe\u624b\u9806\n1. \n2. \n3. \n\n### \u8a66\u3057\u305f\u89e3\u6c7a\u7b56\n- [ ] \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u8a3c\n- [ ] \u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u78ba\u8a8d\n- [ ] \u9664\u5916\u8a2d\u5b9a\u306e\u78ba\u8a8d<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5bfe\u5fdc\u7b56\u306b\u3088\u308a\u3001\u307b\u3068\u3093\u3069\u306eclang-format\u95a2\u9023\u306e\u554f\u984c\u3092\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-23\">\u3088\u308a\u826f\u3044\u30b3\u30fc\u30c9\u54c1\u8cea\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u3068\u306e\u7d44\u307f\u5408\u308f\u305b\u65b9<\/h3>\n\n\n\n<p>clang-format\u3068\u4ed6\u306e\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5305\u62ec\u7684\u306a\u30b3\u30fc\u30c9\u54c1\u8cea\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. clang-tidy\u3068\u306e\u7d71\u5408<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .clang-tidy\nChecks: &gt;\n  *,\n  -fuchsia-*,\n  -google-*,\n  -zircon-*,\n  -abseil-*,\n  -modernize-use-trailing-return-type,\n  -llvm-*\nCheckOptions:\n  - key: readability-identifier-naming.VariableCase\n    value: camelBack<\/pre>\n\n\n\n<p>\u7d71\u5408\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n# run-analysis.sh\n\n# \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30c1\u30a7\u30c3\u30af\nclang-format -i \"$@\"\n\n# \u9759\u7684\u89e3\u6790\nclang-tidy \"$@\" \\\n    -checks=\"-*,readability-*,performance-*\" \\\n    -- -std=c++17\n\n# \u30b3\u30fc\u30c9\u30ab\u30d0\u30ec\u30c3\u30b8\u8a08\u6e2c\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09\nif [ \"$COVERAGE\" = \"true\" ]; then\n    gcov \"$@\"\nfi<\/pre>\n\n\n\n<p><strong>2. Cppcheck\u3068\u306e\u9023\u643a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .github\/workflows\/code-quality.yml\nname: Code Quality\non: [push, pull_request]\n\njobs:\n  quality:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\/checkout@v2\n\n      - name: Format and Static Analysis\n        run: |\n          clang-format -i *.cpp\n          cppcheck --enable=all --error-exitcode=1 .<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u81ea\u52d5\u5316\u3078\u306e\u767a\u5c55\u7684\u306a\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p><strong>1. \u30ec\u30d3\u30e5\u30fc\u30dc\u30c3\u30c8\u306e\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># review_bot.py\nimport subprocess\nimport json\n\ndef analyze_code_quality(file_path):\n    # \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30c1\u30a7\u30c3\u30af\n    format_result = subprocess.run([\n        'clang-format', '--dry-run', '--Werror', file_path\n    ], capture_output=True)\n\n    # \u9759\u7684\u89e3\u6790\n    tidy_result = subprocess.run([\n        'clang-tidy', file_path, '--'\n    ], capture_output=True)\n\n    return {\n        'format_issues': format_result.returncode == 0,\n        'static_analysis': tidy_result.stdout.decode()\n    }<\/pre>\n\n\n\n<p><strong>2. \u81ea\u52d5\u30ec\u30d3\u30e5\u30fc\u30b3\u30e1\u30f3\u30c8\u306e\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ .reviewbot.json\n{\n  \"rules\": {\n    \"format\": {\n      \"severity\": \"error\",\n      \"message\": \"\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u898f\u7d04\u306b\u5f93\u3063\u3066\u3044\u307e\u305b\u3093\"\n    },\n    \"complexity\": {\n      \"severity\": \"warning\",\n      \"threshold\": 15,\n      \"message\": \"\u95a2\u6570\u306e\u5faa\u74b0\u7684\u8907\u96d1\u5ea6\u304c\u9ad8\u3059\u304e\u307e\u3059\"\n    }\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u7d99\u7d9a\u7684\u306a\u6539\u5584\u306e\u305f\u3081\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u65b9\u6cd5<\/h3>\n\n\n\n<p><strong>1. \u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6\u30b7\u30b9\u30c6\u30e0<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># metrics_collector.py\nclass CodeQualityMetrics:\n    def collect_metrics(self, repo_path):\n        metrics = {\n            'format_violations': self._count_format_violations(),\n            'complexity_scores': self._calculate_complexity(),\n            'test_coverage': self._get_test_coverage(),\n            'review_time': self._average_review_time()\n        }\n        return metrics\n\n    def _count_format_violations(self):\n        # \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u9055\u53cd\u3092\u30ab\u30a6\u30f3\u30c8\n        pass\n\n    def _calculate_complexity(self):\n        # \u8907\u96d1\u5ea6\u3092\u8a08\u7b97\n        pass<\/pre>\n\n\n\n<p><strong>2. \u53ef\u8996\u5316\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u69cb\u7bc9<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ dashboard.js\nclass QualityDashboard {\n    constructor() {\n        this.metrics = [];\n    }\n\n    updateMetrics(newMetrics) {\n        this.metrics.push(newMetrics);\n        this.renderCharts();\n    }\n\n    renderCharts() {\n        \/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ef\u8996\u5316\n        this.renderFormatViolationTrend();\n        this.renderComplexityDistribution();\n        this.renderReviewTimeChanges();\n    }\n}<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u5c0e\u5165\u8a08\u753b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u7684\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30c1\u30a7\u30c3\u30af\u304b\u3089\u958b\u59cb<\/li>\n\n\n\n<li>\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u3092\u9806\u6b21\u8ffd\u52a0<\/li>\n\n\n\n<li>\u81ea\u52d5\u5316\u30ec\u30d9\u30eb\u3092\u5f90\u3005\u306b\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c1\u30fc\u30e0\u958b\u767a\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ec\u30d3\u30e5\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u81ea\u52d5\u5316<\/li>\n\n\n\n<li>\u54c1\u8cea\u6307\u6a19\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u30eb\u30fc\u30d7\u306e\u78ba\u7acb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7d99\u7d9a\u7684\u306a\u6539\u5584\u30b5\u30a4\u30af\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   graph LR\n   A[\u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6] --&gt; B[\u5206\u6790]\n   B --&gt; C[\u6539\u5584\u8a08\u753b]\n   C --&gt; D[\u5b9f\u88c5]\n   D --&gt; A<\/pre>\n\n\n\n<p>\u5c06\u6765\u306e\u5c55\u671b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AI\u652f\u63f4\u306e\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30bf\u30fc\u30f3\u8a8d\u8b58\u306b\u3088\u308b\u554f\u984c\u691c\u51fa<\/li>\n\n\n\n<li>\u81ea\u52d5\u4fee\u6b63\u63d0\u6848\u306e\u751f\u6210<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8003\u616e\u3057\u305f\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u56fa\u6709\u306e\u54c1\u8cea\u6307\u6a19<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7279\u6027\u306b\u5fdc\u3058\u305f\u91cd\u307f\u4ed8\u3051<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u56fa\u6709\u306e\u54c1\u8cea\u57fa\u6e96\u306e\u78ba\u7acb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7d71\u5408\u958b\u767a\u74b0\u5883\u306e\u9032\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af<\/li>\n\n\n\n<li>\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30c8\u306a\u63d0\u6848\u6a5f\u80fd<\/li>\n\n\n\n<li>\u81ea\u52d5\u6700\u9069\u5316\u306e\u5b9f\u73fe<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65bd\u7b56\u306b\u3088\u308a\u3001\u30b3\u30fc\u30c9\u54c1\u8cea\u306e\u7d99\u7d9a\u7684\u306a\u5411\u4e0a\u3068\u958b\u767a\u52b9\u7387\u306e\u6700\u9069\u5316\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-1706","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1706"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1706\/revisions"}],"predecessor-version":[{"id":1707,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1706\/revisions\/1707"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}