Wybrane elementy większego projektu w PHP

Od dłuższego czasu pracuję przy większych projektach niż strona internetowa na jeden wieczór, pomyślałem że osoby które tworzą dopiero pierwsze projekty mogą nie znać elementów które bardzo ułatwiają pracę. Poniżej kilku głównych elementów z których korzystam.

Linux

Kiedyś myślałem że można programować pod Windowsem, już dawno zmieniłem zdanie i nie ma opcji żebym do niego powrócił ;) Windows aktualnie służy tylko do odpalania Wiedźmina 3 :) Oczywiście że się da, tylko po co się męczyć...

Git

System kontroli wersji. Dzięki niemu wprowadzając kolejne zmiany w kodzie zawsze mamy historię i możemy zajrzeć do naszych zmian sprzed tygodnia. Druga zaleta to ułatwienie pracy w zespole gdzie łatwo łączymy zmiany kilka osób. Podobnym narzędziem jest Subversion jednak Git oferuje większą elastyczność dzięki np. także lokalnemu repozytorium.

Gitlab

Jest to strona która ułatwia nam przeglądanie wszystkich zmian z Gita. Można tam łatwo odnaleźć commity, branche, tagi. Przydaje się także podczas Code Review.

PHPStorm

Moim zdaniem najlepsze środowisko programistyczne. Prawdą jest że trochę kosztuje ale na prawdę warto. Dawniej używałem programu PHPDesigner, miałem przygotę z NetBeansem i Eclipsem do różnych języków i projektów ale aktualnie nie zmieniłbym PHPStorma na nic innego.

Siłą PHPStorma jest masa dodatków, poniżej kilka z których korzystam:


  • gitignore - zaznaczenie w IDE plików które nie chcemy aby były synchronizowane w systemie kontroli wersji,
  • composer.json support - dodatek polskiego programisty, wspiera i podpowiada składnie composera o którym za chwilę,
  • Symfony2 Plugin - wsparcie dla frameworka Symfony2 w IDE,
  • Symfony2 - Clickable Views - tak jak powyżej, rozszerzenie ułatwiające pracę z Symfony2,
  • BashSupport - wsparcie dla kolorowania składni skryptów bashowych.

xdebug

Niezastąpione narzędzie podczas tworzenia oprogramowania gdy nie wiemy dlaczego coś nie działa :) Dzięki integracji z IDE jesteśmy w stanie krok po kroku pześledzić wszystkie operacje które dzieją się w kodzie, podejrzeć wartości zmiennych i przeanalizować jak zachowuje się nasz program. Więcej o konfiguracji możecie przeczytać na przykład tutaj :

Composer

Narzędzie które ułatwia nam zarządzanie zależnościami w projekcie i korzystanie z gotowych bibliotek.

W starym projekcie korzystam z TinyMCE. Jakie powoduje to problemy? Wszystkie pliki są w gicie i niepotrzebnie zajmują miejsce. Wrzucanie projektu przez FTPa twa wiecznie przez dużą liczbe plików. Do tego aktualizacja wymaga ściągnięcia nowej paczki i ręczną podmianę plików w projekcie.

Jak to wygląda podczas pracy z composerem? Wchodzimy na packagist, wyszukujemy potrzebną bibliotekę, np: mPDF i do naszego pliku konfiguracyjnego dodajemy odpowiedni wpis:


  "require": {
    "mpdf/mpdf": "6.0.*"
  }

Teraz ściągając projekt i wykonując polecenie composer install automatycznie ściągane są wymagane biblioteki (wraz z własnymi zaleznościami) w wersji którą mamy określoną. Tak samo dzieje się to na serwerze produkcyjnym. Composer posiada własny cache dzięki czemu tylko pierwsze ściąganie paczek trwa trochę dłużej. Możemy dokładnie określić wersję lub zaznaczyć że zawsze interesuje nas najnowsza.

Więcej informacji znajdziecie na oficjalnej stronie.

Symfony2

Jeden z najpopularniejszych frameworków w świecie PHP. Pracuje z nim od ponad roku w kilku projektach. Jego zaletami jest ogromna liczba Bundli (dodatków) oferujących gotowe rozwiązania wymaganych funkcjonalności. W internecie łatwo można odnaleźć rozwiązania problemów na które się natknęliśmy. Więcej na symfony.com

Bower

Narzędzie podobne do composera jednak związane bardziej z bibliotekami dla frontendu np Bootstrapem. Więcej na bower.io

AngularJS

Framework JavaScriptowy od Googla. Wprowadza rozdzielenie kodu na poszczególne warstwy. Jego siłą są dyrektywy które sami możemy tworzyć porządkując cały kod. Niedawno ukazała się wersja 1.4 jeszcze nie stabilna, aktualnie pracujemy na 1.3. Można także zapoznać się z wersją 2.0 która jest w fazie beta i ma mało wspólnego ze starszymi wersjami ponieważ została przepisana od zera :) Więcej na angularjs.org

Makefile

Makefile to plik który ułatwia zarządzanie projektem. Dzięki nimi jesteśmy np w stanie po ściągnięciu całego kodu łatwo uruchomić cały projekt. Np pod poleceniem install może kryć się stworzenie bazy danych, aktualizacja composera, ustawienie wymaganych uprawnień do plików i wiele innych. Inne polecenia np szybko wyczyszczą nam bazę i wrzucą przykładowe dane. Wszystko zależy od projektu.

Jenkins

Należy do świata Continuous Integration (CI). Dzięki temu narzędziu możemy łatwo aktualizować nasz projekt na serwerze na poszczególnych środowiskach (produkcyjny, testowym itp). Np po każdym opublikowanym kodzie nasza wersja devowa aplikacji przebudowuje się i z automatu przeprowadzane są testy. Po odpowiednim skonfigurowaniu możemy jednym przyciskiem zaktualizować nasz projekt na produkcji.

Scrum

Nieodzownym elementem wytwarzania oprogramowania jest jego zarządzanie. Scrum ma na celu szybkie uświadomienie problemów w projekcie, czy to w doborze zespole czy technologi. Więcej na ten temat napisałem tutaj.

Podsumowanie

Temat potraktowałem bardzo ogólnikowo. Jeśli kogoś z Was jakiś element zainteresował dajcie znać, mogę go rozwinąć w osobnym wpisie w miarę moich możliwości.

Wiem że do takiej listy można dodawać wiele narzędzi w zależności od projektu, technologii, wymagań klienta itp. Ale może sami macie propozycję co tutaj jeszcze powinno się znaleźć? Mogę uaktualnić wpis ;)

Pozdro!