Укрощение phpStorm, или как начать. Настраиваем свой первый проект

phpStorm

Получил определенный фидбек на свое обращение к компании о создании блога. И некоторые коллеги просили в первую очередь рассказать именно про настройку phpStorm. Некоторые пока не совсем понимают, зачем им этот тормознутый зверь (на самом деле я так не думаю), который изменит их привычный уклад работы с проектом. Да и в самом то деле — зачем?

Редактор vs IDE

Каждый пользуется своим любимым редактором, у кого-то есть автокомплит по встроенным функциям языка, у кого-то даже по функциям в открытых файлах. Есть хорошие (напр. Sublime Text), есть похуже (напр. Notepad++), но поверьте — этого всего недостаточно. Этими инструментами можно пользоваться в тех случаях и проектах, когда количество постоянно редактируемых файлов не превышает 10-15, а процесс работы с кодом является созидательным (именно разработка) и требует много меньше отладки. Но мне, как и большинству сотрудников компании, в которой я работаю, по роду деятельности приходится в большей степени заниматься не созиданием, а изучением уже наработанного, и доработкой существующего функционала. Поэтому нам важно уметь экономить время на мелочах, уметь быстро и точно искать информацию по огромному количеству файлов. Минимум!

Тут то на сцену и выходит IDE. IDE — это полноценная среда для разработки. В IDE должно быть максимум инструментов, для того чтобы никакие вопросы не отвлекали от выстраивания в голове многочисленных, вложенных друг в друга абстракций.

Но, пока не буду вдаваться в подробности, о возможностях phpStorm’a у меня будет еще не один пост. А в этом посте я попробую преодолеть барьер, через который не могут перескочить очень многие разработчики, а именно — создание проекта.

Для того, чтобы использовать максимум возможностей phpStorm, необходимо использовать его в контексте проекта. Проект представляет из себя набор файлов (в нашем случае — файлов сайта), с которыми ведется постоянная работа, а в директории проекта phpStorm хранит свою системную директорию с настройками /.idea. Проект хранится целиком и полностью на той машине, на которой работает разработчик. Это один из ключевых моментов, который поначалу обескураживает разработчиков, которые привыкли работать с сайтом на удаленной машине через ssh или ftp. Только локальное хранение проекта позволит использовать IDE на полную катушку.

Создать проект крайне просто, для этого нужно воспользоваться мастером создания проекта (ваш КО). Для запуска мастера есть несколько способов:

  1. При старте phpStorm появляется окно, где можно выбрать действия для быстрого старта.
  2. Из основного окна phpStorm в меню File …

Описывать создание пустого проекта не буду — это достаточно тривиально. А вот на создании проекта из существующих файлов я остановлюсь подробнее.

У каждого разработчика в нашей компании есть индивидуальный хост разработки под каждый проект, который расположен по адресу <username>.<project_name>.develop.тратата.тата. У каждого разработчика есть полноценный ssh доступ к своему хосту. Этим и воспользуемся. Запустим мастер создания проектов из существующих файлов (File -> Create new project from existing files или аналогичная кнопка на стартовом окне). Вам будет предложен способ создания проекта.

Мастер шаг 1
Список возможных вариантов настройки проекта из существующих файлов

Перечислю их все:

  1. Web server installed locally, source files are located under its document root. Самый простой вариант, когда вы разрабатываете локально на своем ПК все файлы проекта хранятся там же в DOCUMENT_ROOT виртуального хоста. Отметаем этот вариант, т.к. в нашем случае он не нужен
  2. Web server installed locally, source files are located elsewhere locally. Данный вариант аналогичен предыдущему, за исключением того, что файлы проекты лежат не в DOCUMENT_ROOT
  3. Web server is on remote host, files are accessible via network share on mounted drive. Данный вариант подойдет тем, у кого файлы проекта доступны через локальную сеть на другой машине. В принципе, в нашем случае можно использовать этот вариант. Наш develop сервер находится в локальной сети с разработчиками. Правда тут есть одно но — ПК разработчиков под управлением Windows, а сервер на Debian. Сеть между ними работает с помощью Samba, протокол обмена между ними несколько медленнее, чем в случае локальной сети с однородными ОС, поэтому этот вариант мы тоже для себя отметаем.
  4. Web server is on remote host, files are accessible via FTP/SFTP/FTPS. Данный вариант для тех, кто имеет доступ к своему проекту через указанные протоколы и веб-сервер установлен там же.
  5. Source files are in a local directory, no Web server yet configured. В этом случае можно создать «просто проект» без деплоя и синхронизации с веб-сервером, а настроить их позднее.

На самом деле не так важно, какой тип будет выбран. Любой проект может быть приведен к любому состоянию с помощью настроек. Но мы остановимся на 4м варианте — выбираем его.

Далее phpStorm предложит дать имя проекту и указать директорию, где будут храниться все файлы проекта. Если у вас есть локальный веб-сервер, то я рекомендую складировать все проекты в директорию, откуда вы подключаете хосты для веб-сервера, с именами типа <project_name>.loc, чтобы в случае, например, недоступности сети, или девелоп сервера, можно было легко переключиться на локальную разработку.

Мастер шаг 2
Выбираем название проекта и директорию

Также здесь можно выбрать, какие настройки Deployment’а установить, выбираем Default, об этом я расскажу чуть ниже.

На следующем шаге нам предлагается использовать существующий или создать новый «сервер» для подключения к файлам проекта. Что такое сервер в данном случае? Это перечень настроек, которые позволяют подключиться к файлам проекта с помощью какого-то протокола. Для каждого проекта рекомендую создавать свой сервер, несмотря на то, что проекты могут физически находиться на одном develop сервер и иметь одинаковые данные для входа.

Мастер шаг 3
Выбор сервера или создание нового

Выбираем Add new remote server, ставим галку «Don’t check HTTP Connection» и переходим к следующему шагу, где нам нужно собственно указать настройки сервера. Делаем по аналогии с тем, что показано на скриншоте, тут все очевидно (закрасил тут список существующих у меня серверов)
В качестве пароля можете использовать либо SSH ключ, либо обычный пароль, у вас должно быть и то и другое. Рекомендуется использовать ключ, особенно для подключения к серверу вне офиса. Если для шифрования ключа используется пароль, то его тоже нужно будет ввести тут. (закрасил адрес своего ключа)

На следующем шаге нам будет предложено настроить директорию проекта. Поскольку мы указали в настройках сервера в качестве корневого пути директорию расположения файлов проекта, в этом окне будут показаны директории проекта. Соответственно отмечаем корневую директорию как Project Root с помощью соответствующей кнопки. Все директории проекта (кроме .git и .idea и некоторых других глобально исключенных, если они есть) будут помечены зеленым цветом.

Это означает, что они будут выкачаны при создании проекта. Но (внимание, ключевой момент) — мы не будем сейчас качать файлы. В случае с битриксом это долго и мучительно по ssh, т.к. в нем ну очень много файлов небольшого размера. Я пробовал выкачивать, даже по локалке проект целиком (включая ядро), качается непозволительно долго. И причем, если сейчас нажать на Next — phpStorm начнет выкачивать проект, без возможности приостановить процесс — либо ждать придется до конца (очень долго), либо отменять и начинать заново.

Для того чтобы обойти данную ситуацию, мы отмечаем корневую директорию как Excluded from download. Все директории перестанут быть зелеными. Пометив корневую директорию таким образом, мы запретили phpStorm’у загружать проект целиком в данный момент. Смело жмем Next.

На последнем шаге phpStorm предложит указать web адрес проекта. Если вы все сделали так, как я предлагал ранее, в этом поле вам ничего указывать не потребуется. Жмем Finish, и радуемся созданному проекту! Ура!

Но это еще не все 🙂

Во-первых, нам нужно снять ограничение на загрузку файлов, которое мы выставили на предпоследнем шагу. Сделать это можно через меню Tools > Deployment > Configuration. Вам отобразится уже знакомое окошко с настройками сервера, только там будет еще 2 вкладки: Mappings и Excluded Paths. Идем на последнюю и видим там список из 2х директорий — локальной директории проекта и remote директории проекта. Удаляем эти пути из исключений — выделяем их вдвоем с помощью ctrl и жмем Remove path. После этого сохраняем настройки сервера.

Но как нам теперь работать с проектом? Ведь файлов то нет … Тут опять есть несколько вариантов. Если проект находится под версионным контролем, то идем в директорию своего свежесозданного проекта через консоль и выполняем следующие команды:

Тут важно понимать, что проект на локальном ПК и проект на develop сервере должны быть синхронизированы. Если вы делаете клон репозитория, то убедитесь, что ваш проект на develop сервере находится на какой-то стабильной ветке и без изменений. Соответственно, после клонирования, нужно свой локальный проект переключить на ту же ветку. После клонирования нужда в репозитории на develop сервере отпадает, и использовать его больше не имеет смысла.

Пара слов о git на windows. Как установить — есть множество информации в интернетах. После установки не забудьте проставить имя разработчика и email адрес:

Есть небольшая тонкость. Поскольку git отслеживает права файлов, а на windows права на файлы кардинально отличаются от юниксовых, то нужно отключить проверку прав для репозитория, или глобально. Для этого выполните команду (с ключом —global или без)

Если же проект без версионного контроля, то первое что надо сделать — это настроить версионный контроль 🙂 Но в принципе, можно и без него обойтись. Можно для начала скачать все файлы проекта, которые не относятся к ядру. Для этого нужно включить панель с отображением файлов сервера (View > Tool Windows > Remote Host или Tools > Deployment > (Browse) Remote Host). Справа появится панелька с файлами на сервере.

Отмечаем нужные директории и файлы (все кроме ядра и upload), жмем ПКМ > Download from here, и ждем пока загрузится. Как правило — ждать долго не приходится, зависит от объема проекта. Пока качается, можно исключить из синхронизации все те директории, которые нам не нужны — всяческие кэши, upload директорию и тп. И с этим уже можно работать 🙂 А уже потом вечером поставить загрузку оставшихся модулей и компонентов на ночь, и тогда у вас будет целиком выкачанный проект к утру.

Помимо этого есть еще способ скачать проект — можно сжать папку сайта на сервере разработки в архив, скачать этот архив и распаковать уже у себя в папке проекта — тоже рабочий вариант, но в случае с большими проектами нужно умудриться не подвесить сервер, поэтому это наименее приоритетный вариант

После того как скачается, остается настроить лишь синхронизацию между локальными файлами и хостом разработки. Помните мы вначале выбрали настройку для Deployament’а как Default? Пришло время это изменить. Для этого заходим в Tools > Deployment > Options и настраиваем так, как показано на картинке.

Небольшие пояснения о том, что заслуживает внимания. Опция Upload changed files automatically to the default server стоит в значении Always для того, чтобы все изменения мгновенно уходили на сервер разработки. PhpStorm имеет особенность сохранять файлы без нажатия на ctrl+S, и в случае установки этой опции изменения попадут на сервер сразу как только вы перестанете работать с кодом. Скорости передачи в локальной сети должно хватить на то, чтобы пока вы переключаетесь из окна phpStorm’а в браузер с помощью alt+tab (или может ты крут и переключается с win+tab?), phpStorm смог отправить редактируемый вами файл на сервер разработки. И, как раз, когда вы нажмете f5 для проверки своих изменений, вы их увидите тут же.
Опция Upload external changes отвечает за то, чтоб синхронизировать файлы даже после того, как они изменились вне IDE. Самая частая ситуация — версионный контроль. Сделали checkout через консоль, файлы в проекте изменились. Как только вы зайдете в окно phpStorm’a он сразу поймет, какие файлы были изменены и отправит их на сервер.
И последнее — Warn when uploading over newer file — предлагаю ставить в No в случае с проектами под версионным контролем, и напротив, если версионного контроля нет, то ставить Compare content. Если включить эту опцию, то перед отправкой файла на сервер IDE будет сверять отправляемый контент с контентом на сервере. В случае обнаружения расхождения вам будет предложено либо слить изменения, либо выбрать серверный или локальный вариант. В случае с версионным контролем я оставляю эту опцию выключенной, т.к. за синхронизацию в этом случае отвечает система контроля версий, а не IDE.

Как в итоге работает схема разработки с IDE?
Весь проект хранится у вас на ПК (без базы данных). Репозиторий системы контроля версий также хранится у вас локально. При любом изменении в локальном проекте у нас настроена синхронизация на сервер разработки. Сохранили файл — он улетел на сервер. Переключились с ветки на ветку — все измененные файлы улетели на сервер. Такая безусловная. односторонняя синхронизация получается.

Подобная схема работы ни разу не вызвала у меня затруднений при работе с проектом, считаю ее стабильной и лучшей для использования.

И что же мы в итоге получаем по сравнению с работой в редакторе:

  1. Автокомплит по всем классам, функциям, константам ядра фреймворка
  2. Автокомплит по всем вашим классам, функциям, константам
  3. Возможность работать с кодом не вылезая из IDE, и не затрачивая время на поиск документации по функциям, ведь документация доступна при нажатии на ctrl+Q на функции или методе (если для нее определен phpDoc)
  4. Возможность использования стандартизованного стиля кодирования
  5. Возможность поиска любой сущности по всему проекту. Представьте что вам нужно заменить использование какой-то функции на другую, или найти все вызовы определенного компонента, или найти, где используется определенный css класс
  6. При ctrl+ЛКМ мгновенно переходить к определению функции, класс, переменной или константы
  7. Можно перечислять ооочень долго и это тема отдельных статей …